重複の可能性:
C の「static const」と「#define」
Objective-C では、次の 2 行の違いは何ですか:
#define myInteger 5
static const NSInteger myInteger = 5;
実装ディレクティブの上の MyClass.m にあると仮定します。
重複の可能性:
C の「static const」と「#define」
Objective-C では、次の 2 行の違いは何ですか:
#define myInteger 5
static const NSInteger myInteger = 5;
実装ディレクティブの上の MyClass.m にあると仮定します。
#define myInteger 5
プリプロセッサ マクロです。プリプロセッサは、コンパイラが開始される前に、出現するすべてのmyInteger
withを置き換えます。5
これは変数ではなく、一種の自動検索および置換メカニズムです。
static const NSInteger myInteger = 5;
これは、定数である「実際の」変数です (宣言後に変更することはできません)。静的とは、そのブロックへの複数の呼び出しにわたって共有変数になることを意味します。
違いがあります:
定義はテキスト置換です:
static const はメモリ内の変数です
#define を使用すると、コードがバイナリに変換される前に、コンパイラによって識別子が指定された値に置き換えられます。これは、アプリケーションをコンパイルするときに、コンパイラが置換を行うことを意味します。
const を使用してアプリケーションを実行すると、メモリが定数に割り当てられ、アプリケーションの実行時に値が置き換えられます。
このリンクを参照してください:- static const と #define の違い
#define myInteger 5
定数を宣言するマクロです。
したがって、マクロを使用する場所はどこでもmyInteger
、プリプロセッサ エンジンによって 5 に置き換えられます。
const NSInteger myInteger = 5;
値 5 を保持する変数 myInteger を宣言します。
ただし、使用法は同じです。つまり、ハードコーディングを防ぐために使用できる定数です。