Swift 每次出现新场景时,SpriteKit内存都会增加

Swift 每次出现新场景时,SpriteKit内存都会增加,swift,sprite-kit,Swift,Sprite Kit,我试图解决一个问题,每次我在关闭场景及其视图控制器后重新打开场景时,SpriteKit都会导致内存泄漏。这是每次打开时的上升趋势: 当我检查仪器时,问题似乎出在SKTileMapNode SKCTileMapNode::_ensureChunkFortileIndexunsignedint上,但我在willMovefrom视图中使用此代码:SKView: for child in children { if child.isKind(of: SKTileMapNode.sel

我试图解决一个问题,每次我在关闭场景及其视图控制器后重新打开场景时,SpriteKit都会导致内存泄漏。这是每次打开时的上升趋势:

当我检查仪器时,问题似乎出在SKTileMapNode SKCTileMapNode::_ensureChunkFortileIndexunsignedint上,但我在willMovefrom视图中使用此代码: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()
        }

    }

从上图中可以看出,结果仍然是内存使用率上升。仍然使用instruments中的SKTileMapNode?

我尝试检查是否有东西未被释放,但这并没有解决问题。我使用了开发人员技术支持票,一位工程师建议我在项目方案中关闭GPU帧捕获

这95%解决了问题。内存使用量已减少到更合理的数量,在我实施合理的方法取消分配场景、节点等后,应用程序不再继续增加内存使用量

我问这个解决方案是否只用于在Xcode中进行测试,我被告知不是,这就是我的应用程序在应用商店中的表现:


GPU帧捕获是一个用于调试的工具,只有在连接了Xcode调试器的情况下运行应用程序时才会出现工程师说

你是说你的游戏中只有SKTileMapNode对象吗?不,我是说,当我签入仪器时,它们似乎正在泄漏内存。即使我正在清空它们并将其清除。可能有一个对象仍在引用您要删除的节点。如果将SKTileMapNode子类化,则将其放入deiniti{printTileNode Deinitialized}。如果在删除上面代码中的节点时没有打印,那么这就是问题所在。我同意@Muffinman2497,记录SKScene deinit,如果没有调用,可以记录正在使用的每个类的deinit,并检查哪个类没有调用