【发布时间】:2014-05-22 12:25:41
【问题描述】:
为什么必须在块内对弱引用进行强引用?
我了解在块内使用弱引用将避免保留循环。但是为什么又要强引用弱呢?
背景:
正如Mason 所述,这是最佳做法。
我知道在块内引用 self 的正确方法是在块外创建一个弱引用,然后在块内创建一个对该弱引用的强引用[...]
示例:
__weak typeof(self) weakSelf = self;
void (^someBlock)(id) = ^(id data){
typeof(self) strongSelf = weakSelf;
// code using strongSelf
});
【问题讨论】:
-
实际上没有必要在块内再次使指针变强。
-
如果您使用libextobj,则使用
@weakify(self)和@strongify(self)是一种更漂亮、更干净的方法 -
它可能更漂亮,但这不是官方语言的一部分。
-
@holex “实际上没有必要在块内再次使指针变强”。为什么?在块执行的中间,弱指针可能会为零。
-
@BangOperator,那么接下来会发生什么?如果实际对象无论如何都要被释放,那么在大多数情况下,块也会失去它的目的。
标签: ios objective-c objective-c-blocks