弱变量中间为零

2024-05-14

弱变量什么时候变为零?

    weak var backgroundNode = SKSpriteNode(texture: SKTexture(image: initialBackgroundImage!))
    backgroundNode!.position = CGPoint(x: rootSkScene!.frame.midX, y: rootSkScene!.frame.midY)

总是得到:

致命错误:在解包可选值时意外发现 nil

Xcode 错误 https://i.stack.imgur.com/m1ySH.png


局部变量几乎应该总是强的。这样,如果您创建一个对象并将其保存到局部变量,则局部变量提供的强引用将使该对象保持活动状态。当退出当前作用域时,局部变量将从堆栈中弹出,并且它的强引用消失。

在您的代码中,SKSpriteNode initWithTexture方法创建一个新的精灵套件节点并返回它。当函数返回时,init 函数不再具有对该对象的强引用。您保存结果initWithTexture调用弱变量,因此在该语句的末尾,有NO对对象的强引用。它立即被释放。这就是为什么它变成零。

解决方案:将局部变量更改为strong。改变:

weak var backgroundNode = SKSpriteNode(texture: SKTexture(image: initialBackgroundImage!))

to

var backgroundNode = SKSpriteNode(texture: SKTexture(image: initialBackgroundImage!))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

弱变量中间为零 的相关文章

随机推荐