首页 > 代码库 > 第33条:以弱引用避免保留环

第33条:以弱引用避免保留环

  本条要点:(作者总结)

 

 

 

 

  对象图里经常会出现一种情况,就是几个对象都以某种方式互相引用,从而形成“环”(cycle)。由于 Objective-C 内存管理模型使用引用计数架构,所以这种情况通常会泄漏内存,因为最后没有别的东西会引用环中的对象。这样的话,环里的对象就无法为外界所访问了,但对象之间尚有引用,这些引用使得它们都能继续存活下去,而不会为系统所回收。

  最简单的保留环由两个对象构成,它们互相引用对方,图举例说明了这种情况。

              技术分享

  两个对象通过彼此之间的强

  这种保留环的产生原因不难理解,且很容易就能通过查看代码而侦测出来:

 1 #import <Foundation/Foundation.h>
 2 
 3 @class EOCClassA;
 4 
 5 @class EOCClassB;
 6 
 7 
 8 
 9 @interface EOCClassA : NSObject
10 
11 @property (nonatomic, strong) EOCClassB *other;
12 
13 @end
14 
15 
16 
17 @interface EOCClassB : NSObject
18 
19 @property (nonatomic, Strong) EOCClassA  *other;
20 
21 @end

  看代码很容易就能发现其中可能出现的保留环: 如果把 EOCClassA 实例的 other 属性设置成某个 EOCClassB 实例,而把这个 EOCClassB 实例的 other 属性又设置成这个 EOCClassA 实例,那么就会出现图中的保留环。

  

 

第33条:以弱引用避免保留环