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

标签 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)

最佳答案

最佳实践 #1

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

最佳实践 #2

另一个好的做法是避免强保留引用循环。特别是不应存在场景的后代节点,并强烈引用场景本身。

当前场景

那是在你调用的时候说的

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

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

测试

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

deinit {
    print("GameScene deinit")
}

该方法在实例取消初始化时自动调用。

现在运行

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

并在日志中查找 "GameScene deinit"

关于ios - 更改场景时是否必须删除场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39584333/

相关文章:

json - 在 Swift 中解析 PHP Web 服务 Replt

ios - 从另一个类停止或播放 AVAudioPlayer - 应用程序崩溃 - Swift

ios - 我如何指示从 SKScene 使用 UIKit 创建的 View ?

swift - spritekit gamecenter 排行榜 - 如何从场景中显示排行榜?

c++ - 用于 iOS 的 leptonica 1.69 交叉编译(armv7、armv7s 和 arm64)

ios - 远程通知中的自定义声音 iOS 10,swift 3

ios - 用 CALayers mask 在褪色的黑色 View 中有空心圆圈

swift - 无法滚动到可缩放图像中的每个位置

ios - SKNode 子类应该如何与父场景和兄弟节点通信?

ios - NSString stringWithFormat 不适用于货币符号等特殊字符