NSZombieEnabled又让我调试到深夜三点
最近这个项目在用ARC,在追踪内存的时候,发现内存不对。
这样的情况下就不会调用dealloc方法:
@interface Obj1 : NSObject
{
Obj2 *obj2;
}
@interface Obj2 : NSObject
{
}
@implementation Obj1
-(void)dealloc
{
//obj2 = nil; // <--- This is needed to get obj2 to be dealloc'd.
NSLog(@"Obj1 dealloc");
}
-(id)init
{
if ((self = [super init]) == nil)
return nil;
obj2 = [[Obj2 alloc] init];
return self;
}
@end
@implementation Obj2
-(void)dealloc
{
NSLog(@"Obj2 dealloc");
}
-(id)init
{
if ((self = [super init]) == nil)
return nil;
return self;
}
@end
如果obj1的dealloc断点断下来了,那么也会调用obj2的dealloc也会断下来,可是无论如何也不会断。 开始我在obj1的dealloc加obj2 = nil,让其回收内存,可是ARC有这个功能,不需要加这行呀。 一直无解呀,代码没问题,最后check 设置(弄了好多个小时),原来开启了NSZombieEnabled。汗水都出来了,上次吃了NSZombieEnabled的亏,这次又栽在它手上。不过总算找到原因了,不过这几个小时都做的无用功,只有长点经验值。
摘自 开心程序
相关新闻>>
- 发表评论
-
- 最新评论 更多>>