2017-12-05 15 views
0

연구하고 최선을 다한 며칠 후, 메모리 누수 문제에 대한 해결책을 찾지 못했습니다. 나는 이미이 포럼에서 찾은 많은 아이디어를 시도했지만 아무 것도 나를 도울 수없는 것처럼 보였다. 내가 선 self.worldLayer.addChild(mapNode) 모든 것을두면Xcode NSKeyedUnarchiver 메모리 누수 SKNode 확장자

func load(level: String) { 
    if let levelNode = SKNode.unarchiveFromFile(file: level) { 
     mapNode = levelNode 
     mapNode.name = "MapNode" 
     self.worldLayer.addChild(mapNode) 
     loadTileMap() 
    } 
} 

:

나는 다른 사람 않습니다 같은 코드 내 GameScene.sks를로드

extension SKNode { 

class func unarchiveFromFile(file:String) -> SKNode? { 
    if let path = Bundle.main.path(forResource: file, ofType: "sks") { 
     let url = URL(fileURLWithPath: path) 
     do { 
      let sceneData = try Data(contentsOf: url, options: .mappedIfSafe) 
      let archiver = NSKeyedUnarchiver(forReadingWith: sceneData) 
      archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene") 
      let scene = archiver.decodeObject(forKey: NSKeyedArchiveRootObjectKey) as! SKNode 
      archiver.finishDecoding() 
      return scene 
     } catch { 
      print(error.localizedDescription) 
      return nil 
     } 
    } else { 
     return nil 
    } 
} 

그리고 난 여기에 내 코드에서 사용하고 완벽하게 작동하며 메모리 사용이 결코 증가하지 않습니다. 그러나 내가 그것을 사용하면 (나는 그것을 필요로한다!) 기억은 등반과 등반을 계속한다.

인스트루먼트를 사용하면 let scene = archiver.decodeObject(forKey: NSKeyedArchiveRootObjectKey) as! SKNode의 줄은 모든 메모리 누수를 유발한다고 말합니다.

불행히도 나는 그것을 얻지 못하고 내 누수를 제거하지 못했습니다.

모든 도움에 감사드립니다. 미리 감사드립니다.

+0

코드가 오래되었습니다. 더 이상 확장 프로그램이 필요하지 않습니다. 단지 'SKNode (fileNamed : level)'을 사용하십시오. – Knight0fDragon

+0

팁 주셔서 감사합니다. 나는 그것을 시험해 보았고 적어도 SKNode (fileNamed : level) 메모리 누수를 추가하는 것만으로 이전과 완전히 똑같은 확장이 누출을 일으키지 않는다는 것을 알았습니다. 새로운 장면으로 가기 전에 그것을 제거하지 않으면 도움이되지 않습니다. 어떻게 든 내 장면과 mapNode 사이의 steong 참조 여야합니다. 그 문제를 해결하기위한 아이디어가 있습니까? –

+0

gameScene.swift 파일이 있습니까? 그것이 도청 되었기 때문에 아무것도하지 마라 – Knight0fDragon

답변

0

음, 아직 문제를 해결할 수는 없지만 몇 가지 사실을 발견했습니다. 장면 편집기 (.sks) 파일에 원하는 것을 넣을 수 있으며 메모리 누수가 발생하지 않습니다. 심지어 타일지도. 그러나 타일 맵에 타일 하나를 넣 자마자 메모리 누수가 다시 매우 높아지고 있습니다. 하나의 타일로 어떻게 모든 문제를 일으킬 수 있습니까?