iOS开发非ARC模式下的weak-strong dance
我们都知道在ARC模式下,苹果提供了weak-strong dance技术来应对block调用时的retain cycle问题
__weak Dancer *bSelf = self; self.block = ^(){ [bSelf abc]; };
但是在非ARC模式下没办法使用__weak或者__strong来修饰变量以达到效果。
但是我们还有__blcok关键字,神奇的能够达到同样的效果。
我们知道被__block关键字修饰的对象不会被block retain或者release,它的生命周期由外部所决定。
所以可以在这里使用__block关键字对block内部需要访问的外部对象进行修饰
例子:
self.block = ^(){
[self abc];
};
如果block是copy类型的,则上述代码必然会引起retian cycle导致内存无法正常的释放
而如果修改成
__block Dancer *bSelf = self; self.block = ^(){ [bSelf abc]; };
这段代码则不会引起循环引用,从而避免了内存泄露。

浙公网安备 33010602011771号