我正在尝试解决以下问题:SpriteKit每次在关闭场景及其视图控制器后重新打开场景时,都会导致内存泄漏。每次打开都是上升趋势:
当我检查仪器时,问题似乎出在SKTileMapNode“ SKCTileMapNode :: _ ensureChunkForTileIndex(unsigned int)”上,但是我在willMove上使用此代码(从视图:SKView):
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()
}
}
从上图可以看到,结果仍然是占用过多的内存。还在仪器中使用SKTileMapNode吗?
答案 0 :(得分:1)
我尝试检查是否未解除分配,这不能解决问题。我使用了开发人员技术支持票,一名工程师建议我在该项目的方案中关闭“ GPU Frame Capture”。
这95%的人解决了这个问题。内存使用减少到了更合理的数量,并且在我实施了合理的方法来分配场景,节点等之后,应用程序不再继续建立内存使用。
我问这个解决方案是否仅用于Xcode的测试,却被告知不是,这就是我的应用程序在App Store上的表现方式:
“ GPU Frame Capture是用于调试的工具,仅在运行带有Xcode Debugger的应用程序时才存在!” -工程师说。