我希望self是非空的,并且我确信在块执行期间它将是非空的。那么为什么要明确指定[unowned self]?
object.executeBlock {
date = self.lastModified
}
vs
object.executeBlock { [unowned self] in
date = self.lastModified
}
编辑: 好吧,我得到了一些反对意见,那么让我们再试一次。问题是这样的:假设我有一个问题。我的问题是,我想要避免引用循环。我有两个选择。我可以使用 [unowned self] 或者我可以使用 [weak self]。因此,我的问题是:从这两个选项中,为什么我会选择 [unowned self]?为什么不总是选择 [weak self]?
unowned
和weak
之间的区别,而是关于unowned
和什么都不用之间的区别,这个答案回答了你的问题。至于为什么要使用unowned
而不是weak
,原因是你也可以使用weak self
,但是那样的话,self
将会是可选类型,你必须以某种方式对其进行解包,而如果你知道self
仍然存活,那么unowned self
更方便,因为self
是非可选类型,所以你可以在不显式解包的情况下使用它。 - newacct