2009-04-22 15 views
3

私が取り組んできた甘い学問研究のためのiPhoneアプリを開発しています。残念ながら、私の学校はソフトウェア工学/デザインクラスを提供していないので、OO Designのベストプラクティスに関する質問には、私は多くの読書をしています。アプリケーションデザインとAppDelegate

私のジレンマ:

私のアプリケーションは、ユーザーのボタンクリック時に、V1のコントローラクラスは、アクションメソッドを実行ビュー(V1)をロードします。このアクションメソッドは、配列でオブジェクトを埋める必要があります。その後、ユーザーはアクションを再実行するか、別のタブをクリックして別のビューをロードします。アプリケーションの他のビューは、v1が移入された配列を使用します。

この共有配列はどこで宣言されるべきですか?今のところAppDelegateクラスは、GUIなしでフィーチャをテストしていたときからです。私はAppDelegateシングルトンをつかんで、それにアイテムをv1ViewControllerで追加する必要がありますか?静的として宣言する必要がありますか?

ありがとうございました!

^バッファロー

EDIT:

フォローアップの質問:それは話をするより良い方法であるシングルトン、との相互作用:

[[MyAwesomeSingleton sharedInstance] gimmeSomePizza]; 

または

MySingleton *s = [MySingleton sharedInstance]; 
[s gimmeSomePizza]; 

私はあなたが毎回sharedInstanceメソッドを呼び出すかyを行うかどうか疑問に思っていますsharedInstanceへのポインタを定義し、ポインタを参照しますか?

答えて

4

ビューデリゲートを使用してビューとビューコントローラで共有されるデータを格納することは合理的で適切です。

私のアプリでは、UIViewsとView Controllerがすべて「ビュー」の一部であるため、アプリケーションデリゲートをMVCのコントローラの一部として表示します。私はPassive ViewというMVCの変種を使い、私のアプリのモデルとビューパーツを厳密に分離し、それらを接続しているコントローラだけを見るようにしています。

私はあなたが格納しているオブジェクトの配列はあなたのアプリケーションのモデルだと仮定しているので、それらをあなたのアプリケーションのデリゲートに格納することは理にかなっています。 Daniel Dが言ったように、静的にする必要はありません。

アプリデリゲートは実際にあなたのプログラムの中心です。 -applicationDidFinishLaunching:メソッドでモデルとビューを作成して初期化し、モデルデータとビューステートを-applicationWillTerminate:に保存します。 View Controllerがモデルを変更するイベントを受け取ると、アプリケーション代理人のメソッドを呼び出して変更を加えることができます。

+0

フォローアップの質問: それに話をするより良い方法があるシングルトン、との相互作用: [[MyAwesomeSingleton sharedInstance] gimmeSomePizza]。 または MySingleton * s = [MySingleton sharedInstance]; [s gimmeSomePizza]; 私はあなたが毎回sharedInstanceメソッドを呼び出すか、sharedInstanceへのポインタを定義してからポインタを参照するのか疑問に思っていますか? – Buffalo

+0

いずれにしても問題ありません。一般に、両者の間には検出可能なパフォーマンスの違いはありません。あなたが読めるようにする方法を選択してください。 –

0

アプリデリゲートのivarに保存することができます。アプリケーションデリゲートは、とにかくシングルトンなので、静的にする必要はありません(インスタンスが1つしかない)。

アプリケーションデリゲートが少し複雑になっている場合は、データストレージを別のモデルオブジェクトに分解したり、Core Dataを使用したりすることができます。