2017-09-12 15 views
1

iOSでは、ヘッダファイルにいくつかのconst変数を入れて、このヘッダファイルをインクルードすることで異なるソースファイルで使用すると、これらの変数のライフサイクルはどうなりますか?これらの変数はいつ割り当てられますか?これらの変数はどこに保存されていますか?ヘッダーファイルの変数、メモリ管理

答えて

2

あなたが尋ねた:

これらの変数のライフサイクルは何ですか?

ライフサイクルはアプリの寿命です。

これらの変数はいつ割り当てられますか?

アプリが終了するまでリリースされません。

これらの変数はどこに保存されていますか?

プリミティブなデータ型や文字列リテラルについて言えば、スタックではなくヒープではなく、専用の__DATAセグメントに格納されています。


constグローバルの実装をヘッダーに入れないでください。ファイルを.mに入れてください。ファイルへの外部参照のみを.hファイルに入れてください。

だから、例えば、あなたの.mファイルに次のように置く:置く、あなたの.hファイルで、その後、

NSString * const kNotificationName = @"com.domain.app.notification"; 

そして:

extern NSString * const kNotificationName; 

そのように、あなたは一度それを実装しますが、そのヘッダーをインポートするファイルには、そのヘッダーが表示されます。

+0

これらの2つのアプローチの違いは何ですか? – jokeman

+0

グローバル変数はいつメモリにロードされますか? – jokeman

+0

これらの "2つのアプローチ"の違いについては、定数実装を.mに入れ、ヘッダーに 'extern'参照しか持たないということになっています。違いは、前者のアプローチでは、.hファイルをインポートするすべての.mファイルに新しい定数を作成しようとします(これはリンカを混乱させます)。後者のアプローチでは、実際の定数は1回だけですが、他のコンパイル単位が参照できるように外部参照を提供します。 – Rob