为什么要在依赖自我的地方指定[unown self]?

5 block retain-cycle swift

我希望self不为nil,并且我肯定会在执行块的过程中将其设为nil。那么,为什么要明确指定[无主的自我]?

object.executeBlock {
    date = self.lastModified
}
Run Code Online (Sandbox Code Playgroud)

object.executeBlock { [unowned self] in
    date = self.lastModified
}
Run Code Online (Sandbox Code Playgroud)

编辑:好吧,我正在减票,所以让我们再试一次。问:比方说我有问题。那个问题是我想防止参考周期。我有两个选择。我可以使用[无主的自我],也可以使用[弱的自我]。因此,我的问题是:从这两个选项中,为什么我会选择[无主的自我]?为什么不每次都选择[弱自我]?

小智 5

“语言指南声称,如果闭包和包含对象相互引用,并且将同时销毁它们,则您应该使用unown。大概是为了避免安全地删除将要反分配的对象中的弱引用的代价”。

http://www.russbishop.net/swift-capture-lists

因此,[unown self]使self成为一个隐式解包的可选对象,以方便您自己不解包它,而如果它实际上是nil,则可能会发生崩溃。