あなたの質問に対する簡単な答えは、「プログラムが終了したとき」です。
静的変数は、main()
関数が開始する前に、プログラムの冒頭に割り当てられます。同様に、彼らはあなたのプログラムの最後に、main()
の直後にリリースされます。このメモリ管理はObjective-Cランタイムによって処理され、すべてが舞台裏で行われます。
この動作を監視しようとしている場合、おそらくあまり運がないでしょう。カスタムクラスで、次の、その後、別のクラスの静的メンバーとしてそのクラスを使用しなかった場合、例えば:
- (void)dealloc
{
NSLog(@"I am being deallocated");
[super dealloc];
}
をあなたは、このメッセージがログに表示されないだろう。これにはいくつかの理由があります。 1つは、NSLog()
が必要とする変数は、通常のシャットダウン手順の一部として既に割り当て解除されている可能性があります。ランタイムシステムでは、dealloc
メソッドを呼び出すことなく、1回のショットで残りのメモリをすべて解放するだけなので、2つです。
カスタムクラスがdealloc
メソッドで何か重要なことを行っている場合、これは問題になる可能性があります。このような場合は、プログラムが終了する直前にこれらのオブジェクトを呼び出すカスタムcleanup
メソッドを記述することを検討してください。
Obj-Cを学んでいる間、ちょうどこの質問に遭遇しました。 Appleは "クラス変数"は存在しないことを示唆しているようで、インターフェイスで定義したものは静的変数とは別のクラス*メソッド*であり、実装で定義する必要があります。静的変数は、クラスそのものではなく、実装*ファイル*のスコープに制限されています。たぶん、これはちょっとしたことですが、ちょっと混乱しました。 http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/ObjectiveC/Articles/ocObjectsClasses.html#//apple_ref/doc/ uid/TP30001163-CH11-TPXREF118 –