首先声明, 看了这位大大的文章我才解决的:
http://blog.youkuaiyun.com/itianyi/article/details/8715857
<span style="background-color: rgb(248, 248, 248); font-family: 'PT Sans', Geogia, Baskerville, 'Hiragino Sans GB', serif; ">警告:Captureing ‘self’ strongly in this block is likely to lead to a retain cycle</span>
Xcode在编译以上程序的时候会给出一个警告:Captureing ‘self’ strongly in this block is likely to lead to a retain cycle。原因是_items实际上是self->items。_block对象在创建的时候会被retain一次,因此会导致self也被retain一次。这样就形成了一个retain cycle。
解决方法就是,创建一个本地变量blockSelf,指向self,然后用结构体语法访问实例变量。代码如下:
__block ViewController *blockSelf = self;
//这里的VIewController就是当前页面的viewController
_block = ^{
[blockSelf->_items addObject:@"Hello!"];
};
这么修改之后,blockSelf是本地变量,是弱引用,因此在_block被retain的时候,并不会增加retain count,所以retain cycle就解除了,Xcode也不再出现警告了,问题解决。
这是在MRC下的解决方法, 在ARC下, 用__weak即可, sososo~~~