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

Block的循环引用详解

时间:2016-07-05 22:28:53      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

1.首先我们创建了一个网络请求工具类

技术分享 

 

然后storyboard里面去创建了一个导航控制器 并且把它设置为初始控制器   然后拖入一个bar button  --show--到自带的控制器

技术分享  

 这个时候运行代码的结果是

技术分享

 

 

 

x

 

显然这个时候没有造成循环引用   

为什么呢??????????????????

 

//没有self的时候是没有循环引用的

 

//tools是一个局部的变量 执行完了就会被释放掉了

 

//这个时候出现了self没有出现循环引用  控制器也被释放了

 

//block是右边的finished  finished 对这个self.view进行强引用  finished执行完毕了然后就释放掉了   会解除对self的强引用  并不会对self产生循环引用

 

 

例子2:

如果这个时候我们对控制器里面的那个networktools 中的tools对象来一个strong的强引用而不是copy的话

技术分享

 

 这个时候的结果还是和之前是一样的为什么???

控制器对self的解除引用是在finished执行完毕的时候

技术分享

对这个tools的强引用没有关系  

 

 

例子3:

block是一组准备好的代码   在需要的时候执行  可以当作参数传递  

在异步的方法中能够执行block 的话就直接执行   如果当前方法不能直接执行block 通常需要定义一个属性   记录block 在需要的时候执行

上图了:

技术分享

 

这个时候期待的循环引用就出现了

技术分享 

 

Block的循环引用详解

标签:

原文地址:http://www.cnblogs.com/Ninesday/p/5644954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!