美文网首页
iOS --- 循环引用

iOS --- 循环引用

作者: BabyNeedCare | 来源:发表于2018-12-07 16:14 被阅读0次

谈到循环引用,大部分人都能联想到代理, Delegate的属性是用Weak, 那为什么用Strong就不行呢?

从这个图可以看出,2个对象互相持有,就产生了循环引用。

是不是看着很晕,打个比方:

2个男生,一个叫A,  一个叫B

[A跟B打架, A扯头发,B拉耳朵]

[A说你放手,不然我就更大力扯耳朵]

[B说不放,看谁更疼]

结果。。。可想而知,谁都不放手的情况,就大家都僵持(互相持有)

从开发角度:

Person *A = [[Person alloc]init];//A对象创建,引用计数为1

Person *B = [[Person alloc]init];//B对象创建,引用计数为1

互相引用,意味着引用计数器+1, 导致任何时候引用计数都不为0,始终无法释放,无法释放他们的内存,即使已经没有变量持有他们。

危害:

循环引用最直接体验结果就是闪退。其他不直接体验如:内存消耗过高,性能变差

代理中使用Delegate(用Strong修饰):

代理的书写很简单,这里就不插入代码了,在控制器里重写- (void)dealloc;

会发现里面代码不运行,这是因为控制器仍然存在,控制器引用计数器仍然>1,

只要在View的delegate属性上替换Strong, 变成Weak, 你会惊奇的发现- (void)dealloc可以执行了

以下图是根据自己理解描画,如果有误,请指正。

对于NSTimer, Block循环引用,原理上差不多,都是因为相互持有引起,请自行分析

相关文章

  • iOS闭包循环引用精讲

    iOS闭包循环引用精讲 iOS闭包循环引用精讲

  • 如何在 iOS 中解决循环引用的问题

    如何在 iOS 中解决循环引用的问题 如何在 iOS 中解决循环引用的问题

  • iOS复习之Block

    iOS面试中如何优雅回答Block iOS block循环引用

  • iOS中Timer循环引用的原因以及解决办法。

    循环引用是iOS面试当中经常会被问到的东西,而在循环引用当中,最典型的是Timer造成的循环引用,Timer为什么...

  • iOS Runtime 数据结构

    ios内存布局 内存管理方案 数据结构 ARC & MRC 引用计数 弱引用 自动释放池 循环引用 ios内存布...

  • iOS 循环引用

    关于循环引用看着3篇文章就够了,拿走不谢! 循环引用 循环引用 OC中的block OC中的block 关于 bl...

  • iOS循环引用

    以下所有内容属笔者原创, 如有雷同纯属巧合, 未经允许不得转载. 这篇内容主要讲解 定时器 中的循环引用, 常见...

  • iOS循环引用

    在iOS开发中,循环引用是个老生常谈的问题.delegate为啥使用weak修饰,block为什么需要weakSe...

  • iOS循环引用

    什么是循环引用? 循环引用:是指多个对象相互引用,导致内存无法释放,从而导致内存泄露。 循环引用的四种情况? 父类...

  • ios循环引用

    首先,研究ios循环引用,离不开怎么使用strong和weak类型的引用和mrc下内存管理和arc下的内存管理。a...

网友评论

      本文标题:iOS --- 循环引用

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