0

コンテキスト: 継承したばかりのiOSプロジェクトのいくつかの側面を一般化しています。UIColor私が欲しいものの1つは、ユーザーコントロールがアプリ固有のスタイル情報(定義など)にアクセスできるアプリケーションのどこからでもアクセスできるデータ構造です。

質問:「グローバルに」アクセス可能である必要があるデータを含むデータ構造を定義した場合、このオブジェクトをインスタンス化する適切な場所はどこと見なされ、他のオブジェクトがそのオブジェクトへの参照を取得する適切な方法は何ですか?少し調べてみると、次のオプションが見つかります。

  • AppDelegatemy ;のプロパティとしてデータ構造を作成します。で初期化しapplicationDidFinishLaunchingます; 経由でアクセスし((myAppDelegate *)[UIApplication sharedApplication].delegate).getStyleDefsます。
  • 構造をグローバルシングルトンにします(遅延ロードされるか、からのインスタンス化を熱心に行いますAppDelegate)。

他にどのようなオプションがありますか?

4

2 に答える 2

2

シングルトン、AppDelegates、およびトップレベルデータに関するMatt Gallagherの記事は、ObjectiveCでこれを処理するさまざまな方法の長所と短所に関する優れたリファレンスです。非常に短い要約は次のとおりです。シングルトンを使用します。

他の場所でシングルトンに対して使用される主な議論は、大まかに2つの陣営に分類されます。

  1. この種のグローバルオブジェクトが必要な場合は、そもそも間違ったことをしていることになります。これはしばしば良いアドバイスですが、あなたはすでにこのルートに行くことに決めているようです。アプリデリゲートパターンは、Cocoaが自動的に作成するシングルトンをハイジャックし、さらに多くのものをぶら下げていることに注意してください。したがって、シングルトンからの脱却ではありません。
  2. シングルトンは、他の言語で意味されている意味で真のシングルトンであってはなりません。従来のシングルトンは、実際には、アプリケーションでインスタンス化できるのは1つだけであるという禁止を強制します。Objective Cでは、ほとんどの場合、クラスメソッドによって作成されたデフォルトオブジェクトがあるシングルトンを使用しますが、必要に応じてさらに作成することもできます。Appleのクラスはこれをかなり一般的に使用しています。これ以上作成しないことが予想される場合は、クラスメソッドはdefault*で始まり、可能性がある場合はで始まりますshared*

シングルトンをインスタンス化するための最良の最新のアプローチは、ObjectiveCシングルトンに関するこのノートで説明されているようなGrandCentralDispatchを使用することです。

于 2012-07-25T09:44:27.193 に答える
0

と呼ばれる別のファイルを作成しSharedConstants(.h/.m)、そこですべてのアプリケーション全体の定数を使用できるようにします。

次のようなものを入れてください

#define sharedColor [UIColor colorWithRed...]

ファイルの.mバージョンで、ファイルを含む他のクラスで使用できるようになりSharedConstants.hます。

于 2012-07-25T09:40:15.947 に答える