我正在制作我的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
}
如果有人对如何在没有内存泄漏的情况下完成此任务有任何想法,我们将不胜感激。
答案 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)
}