当第二个对象被释放时,第二个对象中创建的对象不会被解除分配,除非我在dealloc中将指针设置为nil,这看起来不正确。ARC下的对象没有被删除
我以为ARC应该设置所有指针为零,默认情况下,当对象被释放时,从而释放任何拥有的对象。
这里是我的代码(只是去核):
@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
我做错什么了吗?我读过的所有内容都说这应该起作用。没有其他人持有obj2,因为将其设置为零释放它。我已经尝试过使用和不使用dealloc函数的代码,以防万一它搞砸了某些东西,我也得到了相同的结果。
有问题的文件正在编译为obj-C++,但我没有对C++和对象做任何事情。
谢谢。
OK ,我发现了这个问题。我有启用僵尸对象设置。我感到惊讶的是,如果它不被设置为零,保持对象不被删除。我认为Zombie Objects在被删除后就被置于对象的位置。如果它从未调用dealloc,那可能会导致一些其他更大的问题。 – 2012-01-02 00:09:10