1. ホーム
  2. ios

[解決済み] AppDelegateは何のためにあり、どのような場合に使うのか?

2022-05-10 05:12:25

質問

iPhoneアプリを作り始めたところです。 AppDelegateとカスタムクラスとでは、どのように使い分ければよいのでしょうか? PythonやPHPのようなAppDelegateのようなパターンを使用する他のプログラミング言語との類似性やルールはあるのでしょうか?

どのように解決するのですか?

私は通常、Andrew が「アプリケーションの心臓部」という言葉を使うことで暗示されるような設計手法を避けています。良いプログラム設計には、通常、「関心領域」によって機能を分離することが含まれます。

デリゲートオブジェクトは、接続されているオブジェクトが特定のイベントや状態になったときに通知を受けるオブジェクトです。この場合、Application Delegateは、UIApplicationオブジェクトが特定の状態に達したときに通知を受け取るオブジェクトです。多くの点で、これは特殊な一対一のObserverパターンである。

つまり、AppDelegateの関心領域は、特別なUIApplicationのステートを扱うことである。これらのうち最も重要なものは

  • applicationDidFinishLaunching: - スタートアップ時のコンフィギュレーションと構築を扱うのに良い。
  • applicationWillTerminate: - 終了時の後始末に有効です。

AppDelegateに他の機能を入れるのは避けるべきだろう。なぜなら、それらは本当はそこに属するものではないからだ。そのような他の機能には以下のようなものがある。

  • ドキュメントデータ -- ドキュメントマネージャーシングルトン(複数のドキュメントアプリケーション用)またはドキュメントシングルトン(単一のドキュメントアプリケーション用)を持つべきである。
  • ボタン/テーブル/ビューコントローラ、ビューデリゲートメソッド、その他のビュー処理 (applicationDidFinishLaunching: におけるトップレベルのビューの構築は除く) -- この作業はそれぞれのビューコントローラクラスで行う必要があります。-- この作業は、それぞれのビューコントローラクラスで行う必要があります。

多くの人は、怠惰であったり、AppDelegateがプログラム全体を制御していると考えたりして、これらのことをAppDelegateに一元化しています。

これらのことをAppDelegateに一元化することは、アプリの関心事を混乱させ、スケールしないので避けるべきでしょう。