[解決済み] 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に一元化することは、アプリの関心事を混乱させ、スケールしないので避けるべきでしょう。
関連
-
[解決済み】Xcode - 'NSUnknownKeyException', reason: ... this class is not key value coding-compliant for the key X" エラーの修正方法とは?
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] iOSまたはmacOSで、インターネット接続が有効かどうかを確認するにはどうすればよいですか?
-
[解決済み] プロジェクト内の単一ファイルのARCを無効にするにはどうしたらいいですか?
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] NSの接頭辞はどういう意味ですか?
-
[解決済み] Unwind segueは何に使うのか、どう使うのか?
-
[解決済み] iPhone 5の画面解像度に対応したアプリを開発・移行するには?
-
[解決済み】NSUserDefaultsにカスタムオブジェクトを格納する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
dyld: ライブラリがロードされていません。エラーの解決
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] UITableViewの下にある余分なセパレータをなくす
-
[解決済み] Xcode 12、iOS Simulator用にビルドしても、iOS用にビルドされたオブジェクトファイルでは、アーキテクチャ「arm64」用にリンクされます。
-
[解決済み] SwiftでUIAlertViewを作成するにはどうしたらいいですか?
-
[解決済み] Swift 3, 4, 5 で dispatch_after GCD を書くにはどうしたらいいですか?
-
[解決済み] SwiftでiOSキーボードを任意の場所でタッチして閉じる
-
[解決済み] コア・データ エンティティの全インスタンスを削除する最短の方法
-
[解決済み] UIImageのサイズを変更する最も簡単な方法?
-
[解決済み] ファイルはユニバーサル(3スライス)ですが、iOSの静的ライブラリのための(n)ARMv7-sスライスエラーが含まれていない、どうにかして回避するには?