Captureing ‘self’ strongly in this block is likely to lead to a retain cycle

警告:Captureing ‘selfstrongly in this block is likely to lead to a retain cycle

这个警告我们在使用block时会经常碰到,什么原因引起的呢?其实是ARC机制造成的

分析:Block对象在创建时会retain一次,如果在block中使用self.xxx时,ARC会自动将self也retain一次,这样就形成了一个retain cycle

解决:创建一个本地变量blockSelf,指向self,然后用结构体语法访问实例变量。

如:__block ViewController *blockSelf = self;
然后在block中需要用到self.xxx时,改成blockSelf.xxx就可以了,因为这么修改之后,blockSelf是本地变量,是弱引用,因此在_block被retain的时候,并不会增加retain count,所以retain cycle就解除了,Xcode也不再出现警告了,问题解决。

Leave a Reply