연구하고 최선을 다한 며칠 후, 메모리 누수 문제에 대한 해결책을 찾지 못했습니다. 나는 이미이 포럼에서 찾은 많은 아이디어를 시도했지만 아무 것도 나를 도울 수없는 것처럼 보였다. 내가 선 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
의 줄은 모든 메모리 누수를 유발한다고 말합니다.
불행히도 나는 그것을 얻지 못하고 내 누수를 제거하지 못했습니다.
모든 도움에 감사드립니다. 미리 감사드립니다.
코드가 오래되었습니다. 더 이상 확장 프로그램이 필요하지 않습니다. 단지 'SKNode (fileNamed : level)'을 사용하십시오. – Knight0fDragon
팁 주셔서 감사합니다. 나는 그것을 시험해 보았고 적어도 SKNode (fileNamed : level) 메모리 누수를 추가하는 것만으로 이전과 완전히 똑같은 확장이 누출을 일으키지 않는다는 것을 알았습니다. 새로운 장면으로 가기 전에 그것을 제거하지 않으면 도움이되지 않습니다. 어떻게 든 내 장면과 mapNode 사이의 steong 참조 여야합니다. 그 문제를 해결하기위한 아이디어가 있습니까? –
gameScene.swift 파일이 있습니까? 그것이 도청 되었기 때문에 아무것도하지 마라 – Knight0fDragon