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

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 的确切作用。

Apple's documentation says:

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 的情况)。