1

Objective-C および iOS 開発の初心者 (C のバックグラウンドから)。タブバーコントローラーと複数のビューを使用してアプリを作成しています。アプリの起動時にオブジェクトを初期化し、そのインスタンスをすべてのビューで使用できるようにしたいと考えています。

現在、私の AppDelegate.m には、次のものがあります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
{
    id myObject;
    myObject = [[MYObject alloc] init];

    return YES;
}

他のビュー コントローラの myObject にアクセスするにはどうすればよいですか?

ありがとう!(そして初心者の質問を許してください)

4

3 に答える 3

1

他の人が示唆しているように、多くのオプションがあります:

シングルトンパターン:

+ (id)sharedFoo {
    static dispatch_once_t pred;
    static FooClass *cSharedInstance = nil;

    dispatch_once(&pred, ^{ cSharedInstance = [[super alloc] init]; });
    return cSharedInstance;
}

...そしてオブジェクト[Foo sharedFoo]全体にアクセスします。一部の開発者は、「神クラス」だけでなく、開発者がますます多くのオブジェクトをグローバルにする必要があることに気付いたときに、そのようなクラスのパンテオンのようなものを作成するリスクがあるため、シングルトンクラスを避けます。多くの場合、その衝動は、アプリケーションの設計について不完全に考えることに関連しています。シングルトンのアイデアのバリエーションでは、シングルトンを使用してすべてのグローバルデータへの参照を保持します。たとえば...個人的には、この目的で'デリゲートを[MyApplicationData sharedData]使用するよりも少しクリーンだと思います。UIApplication

依存性注入:

デザインを使用しているためUITabBarController、依存性注入を使用して(UITabBarControllerDelegateなどのメソッドを介してtabBarController:didSelectViewController:)、ユーザーがタブを選択したときにオブジェクトを伝播し、さらにコントローラー階層に伝播することができます。

所有者としてのアプリケーションデリゲート:

シングルトンクラスのように、これは過度の責任を持つクラスを作成するリスクがあります。デリゲートは、アプリケーションのライフサイクルを担当するだけでUIApplicationなく、関連のない他のあらゆる種類の状態や動作を担当するようになります。ただし、このパターンは、私が見るコードで広く使用されています。

于 2012-11-22T12:02:47.237 に答える
0

シングルトン パターンを使用できます: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW32

于 2012-11-22T11:32:49.243 に答える
0

多くの可能性があります。従来の C のように、クラス実装の外側でオブジェクトを宣言するだけです。または、すべてのグローバル データのストレージとしてシングルトン クラスを使用することもできます。

于 2012-11-22T11:30:41.300 に答える