iOS_循环引用的特殊案例:strong后,self为nil

2020-11-10  本文已影响0人  天蓬大元

最近在工作中,遇到了一个很有意思的事情。

为了解决block的循环引用问题。我对self对象,在block外部使用了weak,然后在block内部使用了strong。但调试代码发现,当block被执行时,self为nil。

weak

问题:对象相互引用,不能被释放,导致内存泄露。
作用:弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为 nil。

strong

问题: block被执行时,对象为空。
作用:
【针对问题1 】无能为力,需要自己排查处理。
【针对问题2 】强引用,在block被调用时,对象的计数器加一。在block执行完毕后,计数器减一。

总结:

使用strong时,需要先判断对象是否为空。

再来一段

所以,在单线程中,没有必在block中使用strong。

M1:block方法
M2:释放对象方法

所以,在多线程中,必须使用strong,使得在block执行过程中,对象的引用计数始终不为零。

上一篇 下一篇

猜你喜欢

热点阅读