更改场景时是否必须删除场景?

时间:2016-09-20 01:22:50

标签: ios swift sprite-kit automatic-ref-counting skscene

在sprite-kit中,我正在制作一个包含不同场景中不同关卡的游戏。我很好奇,如果只是过渡到一个场景将删除另一个场景或他们将继续堆积和占用CPU使用?我正在以这种方式过渡他们。

let reveal = SKTransition.fade(with: UIColor.white, duration: 1.5)
let scene = level2(size: self.size)
self.view?.presentScene(scene, transition:reveal)

2 个答案:

答案 0 :(得分:1)

良好做法#1

在您执行游戏时,通常只在场景中保留一个场景是一种很好的做法。

良好做法#2

另一个好的做法是避免强大的保留参考循环。具体而言,不应存在场景的后代节点,并强烈引用场景本身。

presentScene

当你调用

时说
 self.view?.presentScene(scene, transition:reveal)

SKView到场景的强引用被删除。因此,如果您尊重上述2个假设,场景将自动被取消初始化并从内存中删除。

测试

您可以自己测试一下。只需将其添加到您的游戏场景

即可
deinit {
    print("GameScene deinit")
}

当实例被取消初始化时,将自动调用此方法。

现在运行

 self.view?.presentScene(scene, transition:reveal) 

并在日志中查找"GameScene deinit"

答案 1 :(得分:0)

取决于您删除的含义。它将停止运行,因此从视图绘制和更新周期中删除。现在,它是否从内存中删除取决于你。有一些称为保留计数的东西,呈现一个场景添加到保留计数,从保留计数中删除删除。如果保留计数变为零,则表示deallocs。