【问题标题】:Does a scene have to be removed when changing scenes?切换场景时是否必须删除场景?
【发布时间】:2016-09-20 01:22:49
【问题描述】:
在 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)
【问题讨论】:
标签:
ios
swift
sprite-kit
automatic-ref-counting
skscene
【解决方案1】:
良好做法 #1
在执行游戏时,在内存中只保留一个场景通常是一种很好的做法。
良好做法 #2
另一个好的做法是避免强保留参考循环。具体来说,不应存在对场景本身具有强引用的场景的后代节点。
呈现场景
这就是当你调用时说的
self.view?.presentScene(scene, transition:reveal)
从SKView 到场景的强引用被删除。因此,如果您遵守上述 2 个假设,场景将自动取消初始化并从内存中删除。
测试
你可以自己测试一下。只需将其添加到您的游戏场景中
deinit {
print("GameScene deinit")
}
当实例被取消初始化时,会自动调用该方法。
现在运行
self.view?.presentScene(scene, transition:reveal)
并在日志中查找"GameScene deinit"。
【解决方案2】:
取决于你的意思是删除。它将停止运行,因此从视图绘制和更新周期中删除。现在是否将其从内存中删除取决于您。有一些东西叫做保留计数,呈现一个场景添加到保留计数,从保留计数中删除删除。如果保留计数变为零,它会解除分配。