block循环使用问题
block引用外部变量时,如果是这种形式,则只会造成对i的copy,不会造成引用。
- int i = 0;
- brush.getCardInfo=^(NSDictionary *info){
- NSLog("%d",i); };
如果在int前加__block则在block中实现修改i的数值,这时候用的是引用。
在block中会出现对self的引用,或许会出现界面都消失了,self里面的值还在,这时候的问题就是block的循环引用了,解决办法是
- __block CurrentViewController* blockSelf = self;
- brush.getCardInfo=^(NSDictionary *info){
- [blockSelf test];
- };
通过这个方式,告诉block这个变量的引用计数不要+1。
如果你使用的是ARC,那么就应该改成下面这样:
- __weak CurrentViewController* blockSelf = self;
- brush.getCardInfo=^(NSDictionary *info){
- [blockSelf test];
- };