美文网首页
【技术文章收集】block理解

【技术文章收集】block理解

作者: 小子爱搞事 | 来源:发表于2017-02-07 17:08 被阅读6次

    特点:

    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理解

          本文链接:https://www.haomeiwen.com/subject/uaydbttx.html