Ios popToRootViewControllerAnimated导致内存问题

时间:2016-01-28 14:44:45

标签: ios swift memory-leaks sprite-kit

我正在制作我的SpriteKit游戏。当玩家死亡时,我的目标是让游戏过渡回到开始屏幕。这是通过以下代码完成的。但是,我注意到每次新游戏开始时内存都会增加。 Xcode Instruments没有显示内存泄漏。当内存达到大约150mb时,游戏帧速率下降,游戏变得无法播放。

GameScene我在玩家死亡时调用此功能

func gameOver(){
    if let block = gameOverBlock {
        worldNode.removeAllChildren()
        worldNode.removeAllActions()
        worldNode.removeFromParent()
        self.removeAllChildren()
        block()
    }
}

回到GameViewController中,以下函数被称为

     scene!.gameOverBlock = {
        [weak self] in
        self!.goBack()
    }
}

func goBack(){
    scene!.removeFromParent()
    navigationController!.popToRootViewControllerAnimated(false)
    return
}

如果有人对如何在没有内存泄漏的情况下完成此任务有任何想法,我们将不胜感激。

1 个答案:

答案 0 :(得分:2)

在评出大量代码后,我发现了问题。我上面发布的方法没有引起泄漏,正如Matthew所说,我的代码中间有一个强大的引用阻止了ARC释放内存。我会发布问题代码,因为其他人可能会遇到类似的问题。

在我的GameViewController中,我有以下块:

  scene!.zoomInBlock = {
       self.scene!.size = CGSizeMake(self.scene!.size.width / 2, self.scene!.size.height / 2)
    }

写这个的正确方法(没有引起强引用)将是:

  scene!.zoomInBlock = {
     [unowned self] in self.scene!.size = CGSizeMake(self.scene!.size.width / 2, self.scene!.size.height / 2)
    }