【技术文章收集】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 的某个属性插入字典什么的,这个时候往字典里插入空元素,自然会造成应用奔溃,有了这一行代码,就不会再出现类似的情况了。


你可能感兴趣的:(【技术文章收集】block理解)