码迷,mamicode.com
首页 > 其他好文 > 详细

block循环使用问题

时间:2015-11-06 16:15:30      阅读:217      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!