赞
踩
Block你知道几种?Block的循环引用你有几种解决办法呢?
iOS底层探索之Block(一)——初识Block(你知道几种Block呢?)
在上一篇博客已经介绍了block
的类型,那么本篇博客废话不多说直接进入主题,手把手带你如何解决Block
循环引用的问题!
在正常情况下,A
持有了B
,B
的引用计数+1
,当 A
释放的时候给 B
发送信号,B
接受到 release
信号后,引用计数-1
。
正常使用,正常释放是不会出现循环引用问题的,但是如果出现你中有我,我中有你的情况,就会出现循环引用问题了。更形象的比喻,就是鹤蚌相争故事了。
互相持有都释放不了,如下图所示:
这里出现循环引用问题是,A
和 B
互相持有了,两方都释放不了,A无法调用 dealloc
就给 B
发送不了 release
消息,B
收不到 release
消息引用计数
就不会减少
,也就不能调用 dealloc
方法进行释放。
那么出现循环引用该如何解决呢?
出现循环引用的解决办法就是,打破互相持有的局面,打破任意一方的持有都可以。
先来看看一个循环引用的例子,如下:
这里出现循环引用的原因是:
self
持有了block
,block
里面又持有了self
,形成了一个闭环,互相持有,无法释放。
那么再来看看,下面
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。