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];

};

 

这段代码则不会引起循环引用,从而避免了内存泄露。

posted @ 2013-06-04 15:09  Joe.xi  阅读(583)  评论(0)    收藏  举报