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

2018-11-19  本文已影响0人  小锦子_liu

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

=== 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面试之道里面的图)

上一篇 下一篇

猜你喜欢

热点阅读