0
回答
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的亏,这次又栽在它手上。不过总算找到原因了,不过这几个小时都做的无用功,只有长点经验值。









原文链接:http://blog.csdn.net/favormm/article/details/7582103
<无标签>
举报
长平狐
发帖于5年前 0回/20阅
顶部