当前位置:   article > 正文

iOS底层探索之Block(二)——如何解决Block循环引用问题?_swift block 循环引用

swift block 循环引用

Block你知道几种?Block的循环引用你有几种解决办法呢?

Block循环引用问题

iOS底层探索之Block(一)——初识Block(你知道几种Block呢?)

在上一篇博客已经介绍了block的类型,那么本篇博客废话不多说直接进入主题,手把手带你如何解决Block循环引用的问题!

1. 为什么会出现循环引用分析

1.1 正常情况

在正常情况下,A持有了BB引用计数+1,当 A释放的时候给 B发送信号,B 接受到 release信号后,引用计数-1
正常情况示意图

正常使用,正常释放是不会出现循环引用问题的,但是如果出现你中有我,我中有你的情况,就会出现循环引用问题了。更形象的比喻,就是鹤蚌相争故事了。

1.2 循环引用原因

互相持有都释放不了,如下图所示:

循环引用示意图
这里出现循环引用问题是,AB互相持有了,两方都释放不了,A无法调用 dealloc就给 B发送不了 release消息,B 收不到 release消息引用计数不会减少,也就不能调用 dealloc方法进行释放。

那么出现循环引用该如何解决呢?

1.3 循环引用解决思路

出现循环引用的解决办法就是,打破互相持有的局面,打破任意一方的持有都可以。

2. 解决方案

先来看看一个循环引用的例子,如下:
循环引用举例

这里出现循环引用的原因是:

self持有了 blockblock 里面又持有了 self,形成了一个闭环,互相持有,无法释放。

那么再来看看,下面

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/898683
推荐阅读
相关标签