【技术文章收集】block理解

特点:

1,block导致对象生命周期被延长

[IOS中 Block简介与用法]

http://blog.csdn.net/enuola/article/details/8674063

Weak-Strong-Dance 真的安全吗?

http://ios.jobbole.com/92366/

使用 Heap-Stack Dance 替代 Weak-Strong Dance,优雅避开循环引用

http://ios.jobbole.com/92452/


Weak-Strong Dance 写法

摘自:http://www.jianshu.com/p/fd8a3f0c6f7f

__weak typeof(self) weakSelf = self; 
self.aBlock = ^{
     __strong typeof(weakSelf) strongSelf = weakSelf;
     if (!strongSelf) return; // 其它代码 ... 
}

为什么这么写?

解除循环引用的问题。__weak 是弱引用,不会将 self 的引用计数器 +1。_strong 将 weakSelf 引用计数器 +1,以保持对 weakSelf 的持有,但是 strongSelf 是一个局部变量,过完这个代码块,strongSelf 就会自动释放,所以解除了循环引用的可能性。

防止应用奔溃。if (!strongSelf) return; 我们假设一种很常见的情况,当 self 已经释放的时候,这个 block 被调起,然后就去访问一个为 nil 的僵尸对象,比如说将 self 的某个属性插入字典什么的,这个时候往字典里插入空元素,自然会造成应用奔溃,有了这一行代码,就不会再出现类似的情况了。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容