Block的循环引用
2015-10-30 21:46
246 查看
Block是iOS 4开始导入的,类似lambda表达式,但是在使用Block的过程中,很有可能引起引用循环。如下图所示
当我们遇到这种情况时,可以有两种解决方案。
__block修饰符
通过执行block方法,nil被赋值到__block变量temp中。这个时候__block变量对self的强引用失效,从而避免循环引用的问题。但是如果block()没有执行的话,循环引用一直存在。
__weak修饰符
由于__weak 修饰的对象不拥有所有权,所以就打破循环引用。
当我们遇到这种情况时,可以有两种解决方案。
__block修饰符
... __block id temp = self; void(^block)(void) = ^{ temp = nil; } block(); ...
通过执行block方法,nil被赋值到__block变量temp中。这个时候__block变量对self的强引用失效,从而避免循环引用的问题。但是如果block()没有执行的话,循环引用一直存在。
__weak修饰符
... __weak id temp = self; void(^block)(void) = ^{ NSLog(@"block: %@", temp); } block(); ...
由于__weak 修饰的对象不拥有所有权,所以就打破循环引用。
相关文章推荐
- Bluemix 修改时区
- C程序员的代码规范
- Ionic命令行创建项目
- linux笔记:搜索命令find,locate,which,whereis,grep
- vs2010 中的tab和space转换
- 一个因外包上当受骗的事件,看似不可能发生却偏偏发生的事情
- 【软考9】数据流图技术
- swift 快速奔跑的兔几 本节的内容是:OS X和iOS的应用程序
- 【软考9】数据流图技术
- 第一章 Mysql 简介及安装和配置
- Histogram intersection(直方图交叉核,Pyramid Match Kernel)
- MapReduce编程基础
- Java语言基础 数据类型
- XYLX 10.26 虫洞/Codevs P1391 伊吹萃香
- HDU1210 Eddy's 洗牌问题
- 中华文化:五伦、五常、四维、八德
- 增加订单明细
- 国内机器视觉行业发展现状深度剖析
- 破解Photoshop cs6
- 带你玩转Visual Studio——结局汇总