经过数天和数天的研究并尽我所能,我还没有找到解决内存泄漏问题的方法。我已经尝试了很多我在这个论坛中发现的想法,但似乎没有什么可以帮助我。
我像其他人一样使用此代码加载我的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
}
}
我正在我的代码中使用它:
func load(level: String) {
if let levelNode = SKNode.unarchiveFromFile(file: level) {
mapNode = levelNode
mapNode.name = "MapNode"
self.worldLayer.addChild(mapNode)
loadTileMap()
}
}
如果我遗漏了self.worldLayer.addChild(mapNode)
行,一切都运行良好,内存使用率永远不会上升。但是,如果我使用它(我需要它!),记忆力不断攀爬和攀爬。
使用Instruments,它表示let scene = archiver.decodeObject(forKey: NSKeyedArchiveRootObjectKey) as! SKNode
行导致所有内存泄漏。
不幸的是我没有得到它并且没有设法消除我的泄漏。
我感谢所有人的帮助。提前谢谢。
答案 0 :(得分:0)
好吧,我仍然无法解决问题,但我发现了一些事情。我可以把我想要的东西放在场景编辑器(.sks)文件中,我不会得到任何内存泄漏。甚至是瓷砖地图。但是,只要我在一些tilemap内存中只放置一个tile,内存泄漏就会再次上升。一块瓷砖如何导致所有这些问题?