循环引用

作者: 懒惰的习惯 | 来源:发表于2015-12-29 22:01 被阅读164次

循环引用,这个词其实已经见过很多次,但是在实际应用中并没有真正去解决它,现在仔细来探讨一下。首先,什么事循环引用?
循环引用就是两个指针(strong)相互指向对方形成环状,而导致对象无法释放继而出现的问题,这一现象,我们称之为循环引用。
循环引用导致对象无法释放,继续霸占着内存,虽然暂时不会出现什么问题,但是在应用运行一段时间之后会出现内存泄露,这块内存由于存放的量太大、大多,而内存量不足以存放从而出现了内存泄露。这在内存管理中,是不允许出现的。
导致循环引用最常见的两个方面就是:1、delegate,2、block

图1

如上图所示,由于self.view指向了tableView,而tableview中的delegate又指向了self,即出现了循环引用,而解决办法就是将delegate用assign来修饰。

图2

如上图所示,出现跟delegate相似的情形,但是block与delegate的实际情形是不一样的。首先block的实际情形是strong的,因为,我们还有使用它,调用它,而delegate只需要赋值即可。在使用block的时候,block中若直接使用self调用外面的方法,则出现了循环引用,就跟上图相类似了,所以在使用block调用self外部方法时,我们需要使用weakSelf,这样就能避免掉循环引用的问题。

根据上一篇文章所提到的,block是函数指针,是隐式函数,能当做参数传递下去的函数。而block的本质下次再继续讨论。

关于单例对象生成100个之后,我们如何做内存管理。这需要根据具体情形来思考,我们在生成对象时,首先需要考虑的是它的生命周期,它在哪里用,哪里不用了,哪里就该释放,100个对象,一定有先后顺序,当一个对象的功能(使命)完成之后,我们就可以对其进行释放,亦内存管理。

相关文章

  • 4-8 循环引用

    3种循环引用 自循环引用 相互循环引用 多循环引用 Block的循环引用 NSTimer 的循环引用 破除循环引用...

  • 循环引用的相关问题

    1、循环引用的种类(1)自循环引用(2)相互循环引用(3)多循环引用 如何破除循环引用?(1)避免产生循环引用(2...

  • iOS 内存管理面试题(循环引用)

    循环引用 循环引用的实质:多个对象相互之间有强引用,不能释放让系统回收。 如何解决循环引用? 1、避免产生循环引用...

  • 内存管理-循环引用

    三种类型循环引用 自循环引用 相互循环引用 多循环引用 自循环引用 假如有一个对象,内部强持有它的成员变量obj,...

  • iOS 循环引用

    1. 循环应用的分类: 自循环引用; 相互循环引用; 多循环引用; 自循环引用: 一个对象中有一个成员变量A; 如...

  • iOS开发 循环引用的几种场景

    delegate 循环引用如果delegate使用strong修饰容易引起循环引用 block 循环引用block...

  • Day2

    1 单方向的引用不会产生循环引用。循环引用:闭包引用了self,self引用了闭包。Swift推荐使用解决循环引用...

  • 避免Block的循环引用

    避免Block的循环引用 什么是循环引用,什么时候发生循环引用 1 循环引用就是当self 拥有一个block的...

  • iOS基础 Block解决循环引用

    block 循环引用循环引用 A对象持有B,B又持有A,互相强引用 解决循环引用问题:ARC 和MRC ARC:...

  • 2019-03-07 对WKWebView中的循环引用的理解

    WKWebView的这个循环引用很像定时器的循环引用。定时器的循环引用是因为系统runloop循环 强引用了执行...

网友评论

    本文标题:循环引用

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