1

私が開発しているアプリには10個のコントローラーがあります。セットアップ画面の状態情報を5台のコントローラーと共有したかった。以下のオプションからの最良の戦略は何ですか:

  1. NSUserdefaultsを使用して状態情報を保存し、それを使用します。
  2. 状態情報をAppDelegateインスタンスに保存し、関連するコントローラーで使用する
  3. シングルトンインスタンスを使用して状態情報を維持し、関連するコントローラーで使用する

どちらが良いでしょうか?他に選択肢があれば教えてください。

4

1 に答える 1

2

NSUserDefaults少なくとも値が実際に自然にそこに到達するのであれば、解決策は悪いものではありません。確かに、シングルトンのアイデアは忘れてください。それが別のシングルトンクラスであろうとアプリデリゲートであろうと。


別の可能性もあります。それは、コントローラー間の結合を減らすものです。設定をプロパティとして公開する特定のクラスに依存する代わりに、必要な設定を個々のコントローラーのプロパティとして使用します。

@interface Controller : UIViewController
@property(assign) NSUInteger logLevel; // a sample setting
@end

Factory次に、コントローラーの作成を処理する1つの別個のクラス(これを呼びましょう)を用意します。工場はすべての設定を記録し、コントローラーに必要な設定を渡します。(GitHubにファクトリーアプローチを示すサンプルXcodeプロジェクトがありますが、現時点では、この特定の問題の例は含まれていません。)

このソリューションの利点は、結合が緩いことです。コントローラーの動作を微調整するために追加のオブジェクト(アプリデリゲート、NSUserDefaultsインスタンス、またはSettingsクラスインスタンス)は必要ありません。欠点は、より冗長なコントローラーAPIです。このアプローチを選択するかどうかは、設定​​の性質によって異なります。

もちろん、ハイブリッドソリューションを考え出すことも可能です。すべての設定を保持するクラスを作成し、Settingsそれらを優れたAPI(-objectForKey:呼び出しなし)で公開し、Settingsオブジェクトへのポインターをすべてのコントローラーに共有します。これにはシングルトンは必要ありません。上記のリンク先のGitHubサンプルコードを参照してください。これは、より緊密な結合を意味しますが、インターフェイスの冗長性は低くなります。

于 2012-09-17T06:33:15.893 に答える