Swift 每次出现新场景时,SpriteKit内存都会增加
我试图解决一个问题,每次我在关闭场景及其视图控制器后重新打开场景时,SpriteKit都会导致内存泄漏。这是每次打开时的上升趋势: 当我检查仪器时,问题似乎出在SKTileMapNode SKCTileMapNode::_ensureChunkFortileIndexunsignedint上,但我在willMovefrom视图中使用此代码:SKView:Swift 每次出现新场景时,SpriteKit内存都会增加,swift,sprite-kit,Swift,Sprite Kit,我试图解决一个问题,每次我在关闭场景及其视图控制器后重新打开场景时,SpriteKit都会导致内存泄漏。这是每次打开时的上升趋势: 当我检查仪器时,问题似乎出在SKTileMapNode SKCTileMapNode::_ensureChunkFortileIndexunsignedint上,但我在willMovefrom视图中使用此代码:SKView: for child in children { if child.isKind(of: SKTileMapNode.sel
for child in children {
if child.isKind(of: SKTileMapNode.self) {
(child as! SKTileMapNode).fill(with: nil)
print("Wiped tiles for tilemaps")
child.removeAllActions()
child.removeFromParent()
} else if child.isKind(of: SKSpriteNode.self) {
(child as! SKSpriteNode).texture = nil
child.removeAllActions()
child.removeFromParent()
print("Wiped SKSpriteKitNodes")
} else {
print("Other child removed")
child.removeAllActions()
child.removeFromParent()
}
}
从上图中可以看出,结果仍然是内存使用率上升。仍然使用instruments中的SKTileMapNode?我尝试检查是否有东西未被释放,但这并没有解决问题。我使用了开发人员技术支持票,一位工程师建议我在项目方案中关闭GPU帧捕获 这95%解决了问题。内存使用量已减少到更合理的数量,在我实施合理的方法取消分配场景、节点等后,应用程序不再继续增加内存使用量 我问这个解决方案是否只用于在Xcode中进行测试,我被告知不是,这就是我的应用程序在应用商店中的表现:
GPU帧捕获是一个用于调试的工具,只有在连接了Xcode调试器的情况下运行应用程序时才会出现工程师说 你是说你的游戏中只有SKTileMapNode对象吗?不,我是说,当我签入仪器时,它们似乎正在泄漏内存。即使我正在清空它们并将其清除。可能有一个对象仍在引用您要删除的节点。如果将SKTileMapNode子类化,则将其放入deiniti{printTileNode Deinitialized}。如果在删除上面代码中的节点时没有打印,那么这就是问题所在。我同意@Muffinman2497,记录SKScene deinit,如果没有调用,可以记录正在使用的每个类的deinit,并检查哪个类没有调用