當第二個對象被釋放時,第二個對象中創建的對象不會被解除分配,除非我在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