首页 > 其他 > 详细

block循环使用问题

时间:2015-11-06 16:12:28      阅读:237      评论:0      收藏:0      [点我收藏+]

  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. };  

block循环使用问题

原文:http://www.cnblogs.com/zhouwenbo/p/4942783.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!