引用嵌套块中的弱自我

假设我已经创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) { ... } }];