在Objective-C中,我们将值强制转换为__weak,以避免在某些情况下保留循环。
这篇文章解释了为什么__strong是有用的
__weak typeof (self) weakSelf = self;
self.block = ^{
[weakSelf methodA];
};
我们是否特别需要Swift中的__strong自等价项,它可用吗?如果是,语法是什么?
Swift中没有什么比__strong
更好的了,因为默认情况下所有变量都是强的。
以下是上述代码的Swift等价物:
self.block = { [weak self] in
self?.methodA()
}
如果您想在块的执行过程中保持self
的活力,您可以执行以下操作:
self.block = { [weak self] in
guard let strongSelf = self else { return }
strongSelf.methodA()
}
在上面的代码中,strongSelf
将在块内创建对weakSelf
的强引用,这样当强引用处于活动状态时,弱引用就不会被释放(在我们的情况下,直到块完成执行)。
请注意,以上任何选项都不会导致保留周期。