2011-09-10 7 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メソッドで[super dealloc]の呼び出しを追加しないでください! –

+0

ARCを使用する場合、 '[super dealloc]'を呼び出すとエラーが発生することに注意してください。コンパイラはあなたのためにそれを世話します。 – Eric

答えて

6

はい、必須です。

deallocオブジェクトが破壊され、そのメモリがOSに返される前にオブジェクトに呼び出されます。あなたの場合のように他のオブジェクトを保持している場合は、そのオブジェクトも解放することが重要です。

だから、deallocを無効にしてそこに保持しているリソースを解放する必要があります。

一部のXcodeテンプレートでは、deallocというサンプル実装が提供される場合と提供されない場合があります。

1

ビューコントローラのnibファイル内のすべてのトップレベルオブジェクトを解放するのはあなたの責任です。 -deallocはそうするための一般的な場所です。

関連する問題