C/C++ のバックグラウンドはありません。過去に他の言語を使用した後、Objective-C の学習を始めたばかりです。
どのような状況で、通常の ivar またはプロパティよりも変数の静的宣言を使用する必要がありますか? これを行うことで何が得られますか?
ありがとう
C/C++ のバックグラウンドはありません。過去に他の言語を使用した後、Objective-C の学習を始めたばかりです。
どのような状況で、通常の ivar またはプロパティよりも変数の静的宣言を使用する必要がありますか? これを行うことで何が得られますか?
ありがとう
このキーワードstatic
は、C では多用されています。これは、いくつかの異なる意味を持ちます。一部のコンテキストでは、フィールドがそのファイル (コンパイル単位) の残りの部分でのみ理解されることを意味します。つまり、他のファイルからリンクすることはできません。
Java および C++ では、静的クラス メンバーは個々のオブジェクト レベルではなくクラス レベルで定義されるため、1 つの値がそのクラス (またはそのサブクラスの 1 つ) のすべてのオブジェクトによって共有されます。残念ながら、私見ですが、Objective C はこれをサポートしていません。代わりに、ファイル レベルで静的を使用します。
static キーワードは、グローバル変数にスコープを提供するために使用されます。通常、関数の外部で定義されたグローバル変数にはパブリック スコープがあり、プロジェクト内のすべての .m または .c ファイルに表示されます。変数を静的にすると、変数定義を含む .m または .c ファイルのみにスコープ (可視) される「グローバル」変数を持つことができます。これにより、潜在的な名前の競合を回避しながら、1 つのソース ファイル内の複数の関数で共有できる変数を持つことができます。また、extern キーワードにも注意してください。これにより、特定のグローバル変数が別のソース ファイルで初期化されているが、このソース ファイルで使用されていることを示すことができます。
静的変数が必要かどうかわからない場合は、おそらく必要ありません。
静的変数を使用する理由の 1 つは、クラス変数 (つまり、クラスの各インスタンスが独自のコピーを持つインスタンス変数ではなく、クラス全体に対して 1 つの変数) を提供することです。
この質問(およびその受け入れられた回答) は、静的変数を使用して Objective-C でクラス変数をシミュレートする方法を説明しています。
最初に: このコンテキストでの「オブジェクト」とは、「c オブジェクト」を指します。非常に簡単な言葉で言えば、実行時に存在する何かです。OOP や Objective-C の意味でのオブジェクトとは何の関係もありません。オブジェクトは var と考えることができます。
static
範囲とは関係ありません。static
extern 識別子 (= ブロックの外側で宣言されている) には内部リンケージがあります。リンクの結果は、ISO/IEC 9899:TC3 のセクション 6.2.2 で定義されています。範囲は、セクション 6.2.1 で定義されています。内部リンケージとは、簡単に言えば、異なる翻訳単位 (「.m ファイル」) の 2 つの識別子が同じオブジェクトではなく、異なるオブジェクトを示すことを意味します。すべての翻訳単位には「独自の」オブジェクトがあります。
識別子が静的ストレージ クラスで宣言された extern (= ブロック内) でない場合、プログラムの実行の開始からプログラムの実行が停止するまでの有効期間があります。