2012-02-09 7 views
5

ほとんどのアプリケーションでは、すべてのロジックをクラスに配置しました。各ViewControllerはクラスも参照を取得するか、オブジェクト自体を作成/解放します。ほとんどのロジックとモデルをappDelegateに配置しても構いませんか?

私はIOSの本を読んで始めました。作者はappロジックをappDelegateに入れたいと思っています。そして、viewcontrollerは実際の作業を行うappDelegateメソッドにアクションを中継します。

著者は簡単な例であるか、これを私が学ぶべきものであり、私のアプリでやろうとしているからですか?

+0

私はここでLavaSliderの答えが好きです。http://stackoverflow.com/questions/8421138/importing-appdelegate – Rhubarb

答えて

12

まず、アプリケーションデリゲートが、アプリケーションのデリゲートであるWhat describes the Application Delegate best? How does it fit into the whole concept?

を参照してください。他にどこに置かなければならないか分からないものはすべて保持する場所ではありません。これは、グローバルの格納場所ではありません。これはUIApplicationオブジェクトの代理人です。したがって、アプリケーションの起動、終了、バックグラウンドの切り替えなどに関連するコードを記述するのは適切な場所です。アプリケーションがOSにどのように適合しているかに関係します。

アプリデリゲートはコントローラなので、データを保持してはいけません。データはモデルに入ります。アプリケーションデリゲートは、起動時にモデルを作成して他のコントローラに渡すことができますが、モデルへのAPIではありません。多くの場合、モデルは、アプリケーションデリゲートによって作成されるのではなく、シングルトンです。両方のアプローチには利点があります。

ほとんどのサンプルコードでは、単純な例では少し少ないコードしか必要としないため、モデルのコードはアプリケーションデリゲートに配置されています。しかし、実際のプログラムでは、アプリケーションのデリゲートをあまりにも複雑にし、コードの再利用を著しく傷つけます。あなたのアプリケーションデリゲートは一般的にはかなり小さく、その中のメソッドのほとんどは<UIApplicationDelegate>の一部でなければなりません。

+0

コアデータに依存するアプリケーションのどこでもmanagedObjectContextを使いたいと思います。私はどこにでもAppelegateをインポートする以外の解決策を見つけることができません。別の方法がありますか? – Nil

+1

'managedObjectContext'をアプリケーションデリゲート以外の場所に移動します。独自のシングルトンにすることも、必要なオブジェクトに注入することもできます。私はそれを必要とするモデルオブジェクトに個人的に挿入し、ViewControllerが 'ViewControllerServices'シングルトンを介してそれをフェッチするようにします。しかし、それはアプリケーションデリゲートではありません。 –

+0

私はappstate(userinfo、settings、その他のユーザ設定)を管理するシングルトンを持っています。ここでmanagedObjectContextの強力なプロパティを作成し、これを 'applicationDidFinishLaunching'コードで初期化しました。この流れは最適ですか?私はここでアプリケーション全体からmanagedObjectContextを使うことができます! – Nil

3

例はおそらく単純なので、私はそう言います。合理的に複雑な現実世界のアプリケーションの場合、appdelegateクラスはすぐに扱いにくくなるでしょう。

3

技術的に可能です。プログラミングの練習の面では、そうしないでください。 appDelegateに多くのものを置くと、非常に乱雑になります。私の助言はそれを一人のままにしておきます。

グローバル変数以外のappDelegateには何も配置する必要はありません。そして時にはそれが必要な場合、私の提案はシングルトンパターンのようなものを使うことでしょう。一般に、グローバル変数は良い習慣ではありません。

これが役に立ちます。

関連する問題