class Example {}
unowned let first = Example()
这会产生错误:
Attempted to read an unowned reference but object 0x60c000005f20 was already deallocated
我试图深入了解关键字unowned
的确切含义。
答案 0 :(得分:4)
来自The Swift Programming Language:
就像弱引用一样,无主引用并不会强烈保留它引用的实例。
您创建了Example
的新实例,并将其分配给您的无主常量first
。没有任何内容强烈引用您的Example
实例,因此会立即取消分配。您的无主常量first
现在持有对此已释放对象的引用,因此您会收到尝试读取已释放对象的错误。
unowned
关键字用于创建对象的弱引用,您可以保证引用对象的生命周期与引用对象相同。这使您可以防止引用循环,同时避免需要打开可选项(如weak
的情况)。
答案 1 :(得分:0)
与弱引用不同,当使用无主引用时 另一个实例具有相同的生命周期或更长的生命周期。
在你的例子中,只要" Example()
"被叫,你的new
属性被释放(new
即使是属性也是一个可怕的名字,即使只是为了演示:-)。
那么可以在这里工作的是:
class Example {}
let oneExample = Example() // properties are strong by default
unowned let theSameExample = oneExample