美文网首页
什么情况下会出现循环引用

什么情况下会出现循环引用

作者: 小锦子_liu | 来源:发表于2018-11-19 19:32 被阅读0次

循环引用是指两个或两个以上对象互相强引用,导致所用对象无法被释放的现象。这是内存泄露的一种情况。例如下面的例子:

=== class Father ===

@interface Father: NSObject

@property (strong, nonatomic) Son *son;

@end

=== class Son ===

@interface Son:NSObject

@property (strong, nonatomic) Father *father;

上述代码有两个类,分别为爸爸(Father)和儿子(Son)。爸爸对儿子强引用,儿子对爸爸强引用。所以,要释放儿子必须先释放爸爸,要释放爸爸,则必须先释放儿子,如此一来,两个对象都无法被释放。

解决方法是将Father中的Son对象属性由strong改为weak。

加分回答:

内存泄露可以用Xcode中的Debug Memory Craph 检查,如图3-1所示。(iOS面试之道里面的图)

同时,Xcode也会在Runtime 中自动汇报内存泄露问题,如图3-2所示。(iOS面试之道里面的图)

相关文章

  • 什么情况下会出现循环引用

    循环引用是指两个或两个以上对象互相强引用,导致所用对象无法被释放的现象。这是内存泄露的一种情况。例如下面的例子: ...

  • iOS 什么情况下会出现循环引用?

    循环引用是指2个或以上对象互相强引用,导致所有对象无法释放的现象。这是内存泄漏的一种情况。举个例子: 上述代码有两...

  • Block循环引用(五)

    1、什么是循环引用?循环引用会导致什么问题? 相互持有,双方都无法释放,导致循环引用,A强引用着B,B强引用着A ...

  • property关键字

    weak与assign 一、什么情况下使用 weak 关键字? 1、ARC中,在有可能出现循环引用的时候,往往要通...

  • lua gc算法(1)

    引用计数法 在对象被引用的情况下 引用计数+1,解除引用-1.当引用计数为0时,释放该对象。这个会出现循环引用的问...

  • Block由浅入深(6):循环引用

    循环引用原因 我们都知道,使用Block的时候不小心就会造成循环引用的问题,那么为什么会出现循环引用呢,本文我们同...

  • 什么情况下使用weak关键字,与assign有什么不同?

    什么情况下使用weak关键字 a.在ARC中,在可能出现循环引用的情况下,往往要通过让其中一端使用weak来解决,...

  • weak关键字

    什么情况下使用 weak 关键字? 1. 在 ARC 中,在有可能出现循环引用的时候,此时会使用使用 weak 关...

  • weakSelf 和 strongSelf 应该什么时候用?

    1、为什么会出现block的循环引用? block一般在对象内部声明(Block 会 retain ‘self’)...

  • iOS 中的循环引用

    此处记录的都是ARC情况下~~~ 循环引用是什么? 当两个不同的对象各有一个强引用指向对方,那么循环引用便产生了,...

网友评论

      本文标题:什么情况下会出现循环引用

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