グローバル変数を使用して、あるビューコントローラーから別のビューコントローラーへの値にアクセスしています。私が直面している問題は、viewdidload の下でグローバル変数を呼び出すことです。null が返されますが、(ibaction) の下でグローバル変数を使用すると、正常に動作します。
質問する
356 次
1 に答える
1
問題は、評価の順序に関係している可能性があります。問題の変数は、の時点では初期化されていませんがviewDidLoad:
、アクションが実行されるまでに初期化は完了しています。
以降に発生する別のコールバックからグローバルにアクセスしてタイミングを調整することもできますviewDidLoad:
が、問題を完全に回避するには、グローバル変数の代わりにグローバルシングルトンを使用できます。グローバル状態を保持する別のクラスを作成し、それを使用する必要がある場所にヘッダーを含め、そのクラスメソッドを呼び出してグローバル変数にアクセスします。
ヘッダ:
@interface Globals
+(MyGlobal*)global;
@end
実装:
@implementation Globals
+(MyGlobal*)global {
static MyGlobal* _global;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_global = [[MyGlobal alloc] init];
});
return _global;
}
@end
使用法:
MyGlobal *g = [Globals global];
于 2012-08-07T13:14:35.377 に答える