为什么我不能给无主常量一个初始值?
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
的确切作用。
Unlike a weak reference, however, an unowned reference is used when
the other instance has the same lifetime or a longer lifetime.
在上面的示例中,一旦调用“Example()
”,您的 new
属性 就会被释放(new
即使是属性,即使只是为了演示 :-)。
那么在这里可以工作的是:
class Example {}
let oneExample = Example() // properties are strong by default
unowned let theSameExample = oneExample
来自The Swift Programming Language:
Like a weak reference, an unowned reference does not keep a strong hold on the instance it refers to.
您创建了一个 Example
的新实例,并将其分配给您的无主常量 first
。没有任何东西持有对您的 Example
实例的强引用,因此它会立即被释放。您的无主常量 first
现在持有对此已释放对象的引用,因此您会收到错误消息,提示您正在尝试读取已释放对象。
unowned
关键字用于创建对对象的弱引用,您可以保证被引用对象的生命周期与引用对象相同。这使您能够防止引用循环,同时避免解包可选的(如 weak
的情况)。
class Example {}
unowned let first = Example()
这会产生错误:
Attempted to read an unowned reference but object 0x60c000005f20 was already deallocated
我正在努力深入了解关键字 unowned
的确切作用。
Unlike a weak reference, however, an unowned reference is used when the other instance has the same lifetime or a longer lifetime.
在上面的示例中,一旦调用“Example()
”,您的 new
属性 就会被释放(new
即使是属性,即使只是为了演示 :-)。
那么在这里可以工作的是:
class Example {}
let oneExample = Example() // properties are strong by default
unowned let theSameExample = oneExample
来自The Swift Programming Language:
Like a weak reference, an unowned reference does not keep a strong hold on the instance it refers to.
您创建了一个 Example
的新实例,并将其分配给您的无主常量 first
。没有任何东西持有对您的 Example
实例的强引用,因此它会立即被释放。您的无主常量 first
现在持有对此已释放对象的引用,因此您会收到错误消息,提示您正在尝试读取已释放对象。
unowned
关键字用于创建对对象的弱引用,您可以保证被引用对象的生命周期与引用对象相同。这使您能够防止引用循环,同时避免解包可选的(如 weak
的情况)。