gpt4 book ai didi

Ios popToRootViewControllerAnimated 导致内存问题

转载 作者:可可西里 更新时间:2023-11-01 01:37:30 32 4
gpt4 key购买 nike

我正在制作我的 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
}

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

最佳答案

在注释掉大量代码后,我找到了问题所在。正如 Matthew 所建议的,我在上面发布的方法并没有导致泄漏,我的代码中间有一个强引用阻止了 ARC 释放内存。我会发布问题代码,以防其他人遇到类似问题。

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

  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)
}

关于Ios popToRootViewControllerAnimated 导致内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35064521/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com