他の人が示唆しているように、多くのオプションがあります:
シングルトンパターン:
+ (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
なく、関連のない他のあらゆる種類の状態や動作を担当するようになります。ただし、このパターンは、私が見るコードで広く使用されています。