2011-09-10 52 views
4

如果創建一個UIViewController子類,方法「的dealloc」自動爲您創建。是否有必要在Objective-C類中添加dealloc方法?

- (void)dealloc{} 

然而,當我創建Objective-C類,該方法是不自動創建。是否有必要添加dealloc方法,以便我可以釋放類中的屬性?特別是如果我將它們保留在頭文件中?

舉例來說,在我的Objective-C類的頭文件我有

@interface ClassA : NSObject 
{ 
    NSString *someProperty; 
    UINavigationController *navcon; 
} 

@property (nonatomic, retain) NSString *someProperty; 
@property (nonatomic, retain) UINavigationController *navcon; 

我是否需要手動創建一個dealloc方法來釋放下面的屬性?

-(void)dealloc 
{ 
    [someProperty release]; 
    [navcon release]; 
} 
+1

不要忘記調用你的dealloc方法添加到[超級的dealloc]! –

+0

請注意,使用ARC時,調用'[super dealloc]'會導致錯誤。編譯器爲你處理它。 – Eric

回答

6

是的,你必須這樣做。

dealloc是它被摧毀好之前和它的內存被返回給操作系統在你的對象調用。如果它保留在其他對象上,比如你的情況,那麼釋放這些對象也很重要。

這就是爲什麼你需要重寫dealloc和釋放你持有到那裏的任何資源。

一些Xcode的模板可能會或可能不會爲您提供的dealloc樣本實現的事實是無關緊要的。

1

您負責釋放視圖控制器的nib文件中的所有頂級對象。 -dealloc是這樣做的常見地點。

相關問題