![]() |
![]() |
![]() |
このテーマも今回が最後です。今回は、保持数が0になったオブジェクトがどうなるのか、すなわちメモリの解放についてみていきたいと思います。
保持数が0になったオブジェクトのメモリは、以下のメソッドが暗黙的に呼ばれて解放されます。このメソッドは、やはりNSObjectに定義されているものです。
- (void)dealloc |
このメソッドは、サブクラスで適切にオーバライドする必要があります。なぜなら、初期化の時と同じように、サブクラスには独自のインスタンス変数がある場合もあり、独自の終了方法もあるからです。これらを解放したりするのが、オーバライドの目的です。ここでは典型的なdeallocのコードを見ていきましょう。以下の例では、インスタンス変数barを持つクラスのdeallocメソッドの例です。メモリリークを防ぐためにも、必ずsuperへの呼出しは最後に行います。
- (void)dealloc
{
[bar release]; // barを解除
[super dealloc]; // 親クラスのdeallocを実行
}
|
さて、仮にbarで参照されていたオブジェクトがどこかのオブジェクトでretainされていた場合、上記コードではそのオブジェクトは解放されません。これが正しいコードであるかどうかは、プログラムの作りによりけりですが、一般的には正しい動作といって構わないでしょう。
![]() |
![]() |
![]() |