[英]Why can Apple declare optional protocol funcs without @objc, and unowned optional variables, but I can't?
[英]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.