gpt4 book ai didi

ios - SpriteKit SKCameraNode - 在分配后展开可选值时为零

转载 作者:搜寻专家 更新时间:2023-10-31 22:31:54 24 4
gpt4 key购买 nike

我在 iOS 应用程序中使用 SpriteKit,并尝试在覆盖的 didMoveToView 方法中初始化我的 SKScene 的 camera 属性。如果我像这样初始化它:

override func didMoveToView(view: SKView) {
...
self.camera = SKCameraNode()
self.addChild(self.camera!)
}

...它在 self.addChild 行抛出异常 unexpectedly found nil while unwrapping an Optional value,但如果我这样做:

override func didMoveToView(view: SKView) {
...
let camera = SKCameraNode()
self.camera = camera
self.addChild(self.camera!)
}

...它工作正常,无一异常(exception)。为什么这两种方式不同?是否发生了某种垃圾收集?使用第二种格式并不不方便,但我很好奇我遗漏了什么不同之处。

最佳答案

SKScenecamera 属性定义为weak:

weak public var camera: SKCameraNode?

因此,由于 ARC 将释放任何对其没有强引用的实例( Swift uses ARC ,而不是垃圾回收)——一旦您将 SKCameraNode() 分配给它,它就会已释放,因此将为 nil。然后你继续强制解包(你应该 always avoid doing ),导致崩溃。

您的第二个示例有效,因为您通过

对相机实例进行了强烈引用
let camera = SKCameraNode()

声明,因此防止它在对它的强引用存在时被释放(注意 addChild 也会创建对它的强引用)。

关于ios - SpriteKit SKCameraNode - 在分配后展开可选值时为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37961500/

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