使用ARC时,如果对象自己包含的对象又包含自己,则有可能构成循环引用,导致内存泄漏。
判断循环引用导致了内存泄漏的方法:在dealloc方法中加一个断点。如果dealloc方法没有被调用,
则很有可能是循环引用导致了 self无法释放。
如下例:
@interface FartherObj : NSObject
{
SonObj _sonObj;
}
@implementation FartherObj
-(id)init
{
self = [super init]; if (self)
{
//这时,如果sonObj对self是强引用,则构成循环引用。sonObj对self的应用必须时弱引用。
sonObj = [[SonObj alloc] initWithFartherObj:self]
}
return self;
}
-(void)dealloc
{
//请在此加断点,如果此断点从未中断,则有可能内存泄漏了。
sonObj = nil;
}
@end