7

重複の可能性:
iOSアプリ内でグローバルに必要なオブジェクトインスタンスをどこにどのように保存する必要がありますか?

私はいくつかのグローバルオブジェクト(ほとんどすべてのアプリケーション画面で使用)を持っており、ほとんどの場合、それらはアプリケーションの開始直後に作成されます。すべてのViewControllerからこのオブジェクトにアクセスしたい(他には何もありません。ViewControllerのみ)。どこに保管しますか?

私は@propertyで考えますが、AppDelegateこれは醜い解決策だと思います(しかし私は間違っている可能性があります)。

オブジェクトは非常に複雑になる可能性があり、これは単純なタイプではありません。

4

5 に答える 5

10

グローバルオブジェクトにアクセスするためのクラスメソッドを使用してグローバルオブジェクトをクラスに配置し、+(void)loadこれらのオブジェクトを準備するために実装し、静的変数に格納することで、グローバルオブジェクトにアクセスできるようにすることができます。

ヘッダ:

@interface GlobalObjects
+(void)load;
+(MyObject1*)myObject1;
@end

実装:

#import "GlobalObjects.h"
static MyObject1* _myObject1 = nil;
@implementation GlobalObjects
+(void)load {
    _myObject1 = [[MyObject1 alloc] init];
}
+(MyObject1*)myObject1 {
    return myObject1;
}
@end

使用法:

MyObject1 *shared = [GlobalObjects myObject1];

遅延初期化のために、メソッド内で変数を静的にすることもできます。

于 2012-07-18T16:43:20.460 に答える
3

ええ、私はApp Delegateのプロパティを使用してから、sharedApplicationデリゲートプロパティをキャストしてそれらにアクセスします。

__weak AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

お役に立てれば、

ジョナサン

于 2012-07-18T16:41:43.933 に答える
1

AppDelegateの@propertyは良い解決策です。シングルトンを使用することもできます。

于 2012-07-18T16:42:16.677 に答える
1

オブジェクトがたくさんある場合は、アプリデリゲートで問題ありません。

そうしないと、すべてのグローバルデータを含む一種の「モデルオブジェクト」を作成する可能性があります。

または、構造がある場合は、CoreDataと一緒に保存することもできます。

ただし、前述したように、オブジェクトが2つしかない場合は、アプリデリゲートで問題なく動作します。

于 2012-07-18T16:42:59.673 に答える
1

ビューコントローラ間でのみ使用される場合は、実際に共有オブジェクトにアクセスする必要がある最高レベルのビューコントローラに保存することを検討してください(新しいコントローラを作成/プッシュするときは、その参照カウントプロパティを設定します)。

このように、マスタービューコントローラーにコンテンツ/モデルを詳細ビューコントローラーに入力することを考えるかもしれません。

それは、グローバルとしての資格(およびその負担)から実際に離れています。

于 2012-07-18T16:50:38.883 に答える