私はこの問題に対する洗練された解決策があるかどうかを判断しようとしています。
いくつかのヘッダーでグローバルが定義されているとします。
Constants.h:
extern NSString *someGlobal;
そして、このグローバルを他のクラスで使用したいと思います。
Foo.m
NSString *localVariable = someGlobal;
次のようにグローバルを初期化すると、これはすべて正常に機能します。
Constants.m:
NSString *someGlobal = @"Some String Literal";
しかし、グローバルをコンパイル時定数ではないものに初期化する必要があるとしましょう。そのような場合、私は通常これを行います:
Constants.m:
@implementation Constants
+ (void)initialize {
someGlobal = ... // some non-trivial initialization
}
@end
今、私はに潜在的な問題がありFoo.m
ます。Constants
を使用しようとしたときにクラスが参照されていない場合someGlobal
、結果はになりnil
ます。回避策は次のとおりです。
Foo.m(または一部のアプリスタートアップコード):
[Constants class];
これにより、クラスのinitialize
メソッドがトリガーされ、適切に初期化されます。を実行時に使用する前にこれを実行する限り、問題なく動作します。Constants
someGlobal
someGlobal
[Constants class
アプリの起動時に]などのコードを呼び出す必要なしに、コンパイル時定数以外でexternグローバルを初期化するためのより良い方法はありますか?