アプリが起動するとすぐにインスタンスを作成したいクラス(NSNotificationCenterからデータを取得して処理し、NSNotificationCenterに再度送信する)があります。ビューコントローラからそれを行うことはできますが、それらは関連していないため、それは厄介なようです。では、UIに直接関連していないが、アプリケーションの存続期間中持続する必要があるオブジェクトを作成するのが適切だと思うのはどこですか?
4 に答える
コードをアプリデリゲートに押し込むのと同じくらい魅力的ですが、衝動に抵抗します。アプリケーションデリゲートは、理想的には、通常のアプリケーション実行から可能な限り遠ざける必要があります。グローバルインスタンスである唯一の理由は、アプリケーションとシステムの間のデリゲートとして機能できるようにするためです。権力分立を維持するために、でシングルトンインスタンスを初期化し、main()
通知に反応させます。
そのようなものをViewControllerに入れたくない場合、AppDelegateは通常それを置くのに適した場所のように見えます。
実行中のアプリのライフサイクル全体にわたって存続する必要があるアイテムをAppDelegate.h/mファイルに配置する必要があります。
これはアプリデリゲートで行います。アプリデリゲートは、最初に作成されたオブジェクトの1つであり(View Controllerのかなり前に!)、他のすべてのオブジェクトからグローバルに表示されます。したがって、この他のクラスをインスタンス化し、そのインスタンスをアプリデリゲートのプロパティにすると、他のすべてのオブジェクトにもグローバルに表示されます。
私の本(http://www.apeth.com/iOSBook/ch13.html#_global_visibility)で言っているように:
自由に作成できるアプリデリゲートのパブリックプロパティは、アプリデリゲートがグローバルに表示されるため(共有アプリケーションがグローバルに表示されるため)、グローバルに表示されます。
また、可視性が必要ない場合でも(通知を使用しているため)、アプリデリゲートは最も寿命の長いオブジェクトです。アプリの起動時に作成され、破棄されることはありません(アプリが強制終了されるまで)。