首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

【技术文章收集】block理解

2024-12-17 来源:花图问答

特点:

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

[IOS中 Block简介与用法]

Weak-Strong-Dance 真的安全吗?

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


Weak-Strong Dance 写法

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


显示全文