繁体   English   中英

为什么不能给一个无主常数一个初始值?

[英]Why can't I give an unowned constant an initial value?

class Example {}
unowned let first = Example()

产生错误:

Attempted to read an unowned reference but object 0x60c000005f20 was already deallocated

我试图深入了解确切的关键字unowned做什么。

来自Swift编程语言

像弱引用一样, 无主引用也不会对其引用的实例保持强大的控制力

您创建一个Example的新实例,然后将其first分配给您的未拥有的常量。 没有任何东西可以很好地引用您的Example实例,因此可以立即将其释放。 你无主常数first ,现在抱着这种重新分配的对象的引用,所以你得到你正试图读解分配的对象错误。

unowned关键字用于创建对对象的弱引用,在这里您可以保证所引用对象的生存期与引用对象相同。 这样一来,您就可以避免避免引用循环,同时又无需拆开可选的包装(如weak的情况)。

苹果的文档说

但是,与弱引用不同,当另一个实例具有相同的生存期或更长的生存期时,将使用无主引用。

在您的例子在那里,只要“ Example() ”之称,您的new特性将被释放( new是因为即便是一个属性可怕的名字,哪怕只是一个演示:-)。

因此,这里可以工作的是:

class Example {}
let oneExample = Example() // properties are strong by default
unowned let theSameExample = oneExample

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM