[swift]SpriteKit SKCameraNode-零时展开分配后,只是一个可选值

标签: ios Swift
发布时间: 2017/3/6 22:57:40
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我是在 iOS 应用程序,使用 SpriteKit,尝试初始化 camera 我 SKScene 在重写属性 didMoveToView 方法。如果只是将它初始化就像这样︰

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

......,它抛出该异常 unexpectedly found nil while unwrapping an Optional valueself.addChild 线,但如果我这样做︰

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

......,它工作正常,没有异常。这两种方式有什么不同?有某种垃圾收集发生的吗?其不方便使用第二种格式,这工作,但我很好奇,什么不同,我失踪。

解决方法 1:

camera属性的 SKScene 定义为 weak :

weak public var camera: SKCameraNode?

因此,电ARC将释放任何实例时,没有对它的强引用 ( Swift 使用ARC,没有垃圾回收) — — 只要你分配 SKCameraNode() 给它,它会释放,因此将 nil 。你然后继续强制打开它 (这你应该总是避免这样做),导致程序崩溃。

你的第二个示例工作,你有对你相机实例通过强引用你

let camera = SKCameraNode()

声明 》,因此防止它被释放时,对它的强引用存在 (请注意, addChild 还将创建一个强引用它)。

赞助商