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

时间:2018-12-03 08:36:40

标签: swift sprite-kit

我正在尝试解决以下问题:SpriteKit每次在关闭场景及其视图控制器后重新打开场景时,都会导致内存泄漏。每次打开都是上升趋势: spritekit memory leak

当我检查仪器时,问题似乎出在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吗?

1 个答案:

答案 0 :(得分:1)

我尝试检查是否未解除分配,这不能解决问题。我使用了开发人员技术支持票,一名工程师建议我在该项目的方案中关闭“ GPU Frame Capture”。

这95%的人解决了这个问题。内存使用减少到了更合理的数量,并且在我实施了合理的方法来分配场景,节点等之后,应用程序不再继续建立内存使用。

我问这个解决方案是否仅用于Xcode的测试,却被告知不是,这就是我的应用程序在App Store上的表现方式:

“ GPU Frame Capture是用于调试的工具,仅在运行带有Xcode Debugger的应用程序时才存在!” -工程师说。