引用嵌套块中的弱自我
假设我已经创build了一个弱自我使用
__weak typeof(self) weakSelf = self; [self doABlockOperation:^{ ... }];
在那个块里面,如果我嵌套另一个块:
[weakSelf doAnotherBlockOperation:^{ [weakSelf doSomething]; }
它会创build一个保留周期吗? 我是否需要为弱者创造另一个弱点?
__weak typeof(self) weakerSelf = weakSelf; [weakSelf doAnotherBlockOperation:^{ [weakerSelf doSomething]; }
这取决于。
如果实际存储块,则只创build一个保留周期(因为self
指向块,并且指向self
)。 如果你不打算存储任何一个块,那么使用对self
的强引用就足够了 – 块被执行后首先被释放,然后释放它的self
指针。
在你的特定例子中,除非你正在执行更多没有显示的操作,否则你不需要创build更弱的WeakerEvenWeakerSelfs。
您的代码将正常工作:弱引用不会导致保留周期,因为您明确指示ARC不要增加弱对象的retainCount。 然而,对于最佳做法,您应该使用较弱的对象来创build对象的强大参考。 这不会创build一个保留周期,因为块内的强指针只会一直存在,直到块完成(它只是范围就是块本身)。
__weak typeof(self) weakSelf = self; [self doABlockOperation:^{ __strong typeof(weakSelf) strongSelf = weakSelf; if (strongSelf) { ... } }];