Objective-cクラスのメソッドで変数がstatic
と宣言されている理由を理解できませんか?Objective-cクラスメソッドで変数をstaticとして宣言するのはなぜですか?
変数static
の範囲は何ですか?
Objective-cクラスのメソッドで変数がstatic
と宣言されている理由を理解できませんか?Objective-cクラスメソッドで変数をstaticとして宣言するのはなぜですか?
変数static
の範囲は何ですか?
static
スタックフレームがスタックからポップされたときに変数が破壊されることはありません(通常の変数がそうでなければ、叙事詩的なメモリリークが発生します)。それらをローカル変数にしかアクセスできないグローバル変数として参照してください。彼らはプログラム全体が終了するまで生き続けるでしょう。
例:
+ (id)sharedInstance {
static singletonInstance = nil; // for example
if (singletonInstance == nil) {
singletonInstance = [[self alloc] init];
}
return singletonInstance;
}
範囲がちょうどCのように、ファイルレベルであり、それが静的であるため、変数は、アプリケーションの存続期間ままになり、クラスのすべてのインスタンスがアクセス権を持っていますそれ。良い例は、シングルトンインスタンスを参照したり、グローバルカウンタを実装したり、ある種のリソースロックを実装することです。
"スタックフレーム"はどうですか? –
@Rudy Velthuis、それは、ありがとう:) –
FWIW、スタックフレームは "内部{と}"ではありません。これは、ローカル変数および関数引数のセットであり、戻りアドレスおよびいくつかの家庭の場所(例えば、スタックポインタおよびいくつかのレジスタを一時的に格納するためのもの)と共にある。現在のファンクションブロックからリターンするときに、明示的にreturnを呼び出すか暗黙的に終わりに到達すると無効になります。 –