BACK INDEX NEXT

Cocoaのメモリ管理(4)

このテーマも今回が最後です。今回は、保持数が0になったオブジェクトがどうなるのか、すなわちメモリの解放についてみていきたいと思います。

オブジェクトの解放(dealloc)

保持数が0になったオブジェクトのメモリは、以下のメソッドが暗黙的に呼ばれて解放されます。このメソッドは、やはりNSObjectに定義されているものです。

- (void)dealloc

このメソッドは、サブクラスで適切にオーバライドする必要があります。なぜなら、初期化の時と同じように、サブクラスには独自のインスタンス変数がある場合もあり、独自の終了方法もあるからです。これらを解放したりするのが、オーバライドの目的です。ここでは典型的なdeallocのコードを見ていきましょう。以下の例では、インスタンス変数barを持つクラスのdeallocメソッドの例です。メモリリークを防ぐためにも、必ずsuperへの呼出しは最後に行います。

- (void)dealloc
{
    [bar release];	// barを解除
    [super dealloc];	// 親クラスのdeallocを実行
}

さて、仮にbarで参照されていたオブジェクトがどこかのオブジェクトでretainされていた場合、上記コードではそのオブジェクトは解放されません。これが正しいコードであるかどうかは、プログラムの作りによりけりですが、一般的には正しい動作といって構わないでしょう。

BACK INDEX NEXT