block循环使用问题

  block引用外部变量时,如果是这种形式,则只会造成对i的copy,不会造成引用。

 

  1. int i = 0; 
  2. brush.getCardInfo=^(NSDictionary *info){  
  3.         NSLog("%d",i); };

 

  如果在int前加__block则在block中实现修改i的数值,这时候用的是引用。

  在block中会出现对self的引用,或许会出现界面都消失了,self里面的值还在,这时候的问题就是block的循环引用了,解决办法是

  1. __block CurrentViewController* blockSelf = self;  
  2. brush.getCardInfo=^(NSDictionary *info){  
  3.         [blockSelf test];  
  4. };  

  

  通过这个方式,告诉block这个变量的引用计数不要+1。

  如果你使用的是ARC,那么就应该改成下面这样:

  1. __weak CurrentViewController* blockSelf = self;  
  2. brush.getCardInfo=^(NSDictionary *info){  
  3.         [blockSelf test];  
  4. };  
posted @ 2015-11-06 15:36  WeberZhou  阅读(162)  评论(0编辑  收藏  举报