0

グローバル ポインター メモリに関する基本事項をクリアしたいのですが、グローバル定数のメモリへの影響を理解するのに役立つ人がいますか。

// This is define out of interface on top of .m file
NSString *const kXyz  = @"xyz";

それはメモリ使用量に影響しますか、なぜ私はこの定数を使用する場合と使用しない場合があるのでこれを求めているので、MACRO を使用することを考えています

#define G_XYZ @"xyz"

これをグローバル定数の代わりにif ステートメント内で使用してメモリを節約します。MACRO はコンパイル時に削除されるため、メモリを節約します。

MACROS と Global const についての私の理解は正しいですか?

4

2 に答える 2

0

いいえ、次のようなマクロを使用します。

#define G_XYZ @"xyz"
NSString *s = G_XYZ;

次のように前処理されます。

NSString *s = @"xyz";

したがって、前処理ステップの後、2つは同一になります。

コードが前処理されているものを確認したい場合は、試してくださいgcc -E myfile.c

ヘッダーに書き込むことができます:

extern NSString *g_xyz;

そして、1 つのソース ファイルで:

NSString *g_xyz = @"xyz";

他のソース ファイルでは、次の値を使用できます。

NSLog(g_xyz);

ただし、これは、文字列が巨大であるか、多数ある場合を除いて、考える価値はありません。空のプログラムでもおそらく数 KB になるため、極端な状況 (Objective C を使用しない可能性が高い) を除いて、実際には数バイトを削る必要はありません。

于 2013-05-24T18:37:04.440 に答える