2010-08-06 60 views
2

如果我創建一個簡單的類像這樣當的dealloc被稱爲在Objective-C

@interface table : NSObject { 

    NSMutableArray *array; 
} 

@end 

,並在Init方法我稱之爲:array = [[NSMUtableArray alloc] init]; 並在dealloc方法我稱之爲:[array release];

但我有一個內存韭菜因爲dealloc方法從來沒有被調用過。我必須自己調用dealloc方法嗎?

回答

0

當對象的保留計數達到0時,它將由運行時間標記爲清理。當運行時清理對象並回收內存時,dealloc被稱爲給它一個機會來清除對實例變量等的任何其他對象引用。這有幫助嗎?如果你想看到它叫,把

NSLog(@"%s", _cmd); 

或一個破發點,在你的dealloc方法的開始和觀看調試器/控制檯。

+0

如果我放置一個breakPoint,程序不會進入dealloc方法。我的課是一個單身人士,它可以改變一些東西? – alex 2010-08-06 22:14:22

0

不可以,您不應該直接撥打[self dealloc]。這是什麼讓你覺得-dealloc從未被稱爲?

編輯:您不應該也不需要致電[table dealloc]。您唯一應該發送dealloc消息的時間是覆蓋dealloc並致電[super dealloc]

+0

因爲我用韭菜工具運行,他說這個表韭菜,並且我在dealloc方法中放了一個斷點,它從來沒有調用過... – alex 2010-08-06 22:10:29

+2

那麼主要問題是「你什麼時候調用[myTable release ]?」 – 2010-08-07 02:38:27

0

這一切看起來都正確。你的類table的實例在這裏,它會在它被完全釋放時調用它的方法dealloc。所以如果你使用你的課程的方式導致整個table實例泄漏,你只會有泄漏。

但是,當然,相同的規則適用於使用您的table類的任何類。