委任はコア デザイン パターンです。これにより、プログラムの部分間で責任を分離できます。たとえば、画面に描画するプログラムの部分は、おそらくデータベースと通信してはならないという考えです。これにはいくつかの理由があります。
パフォーマンス: 画面に描画する同じオブジェクトがデータ ストアにアクセスすると、パフォーマンスの問題が発生します。限目。完全停止。
コードのメンテナンス: 適切にモジュール化されたコードを概念化するのは簡単です。(私の場合はともかく)
柔軟性: コード内でサブクラス化するのは素晴らしいことですが、あらゆる種類の望ましくない動作をするモノリシックなクラスに出くわすまでは。動作をオーバーロードして無効にする必要があり、プロパティの名前空間が汚染される可能性があります。代替案として、カテゴリ、委任、およびブロックを試してください。
そうは言っても、サブクラス化が適切な状況に実際に遭遇しました。一定期間操作されなかった場合に特定の設定メニューを自動的に閉じたいキオスク アプリがあります。そのためには、アプリ全体でタッチ イベントにアクセスできる必要がありました。をサブクラス化UIApplication
し、オーバーライドしsendEvent:
ました。エッジケースですが、それは適切でした。ソロモン王が伝道者の書で言い換えたように、「太陽の下では、すべてのものには時間と場所があります。
プログラムの作成、読み取り、反復、保守を容易にするために、特定のプラクティスに従うことを強くお勧めします。多くのクラスをサブクラス化することは大歓迎です。宣伝どおりに実行される限り、Apple はコードが貧弱であることを理由にアプリを拒否することはありません。とはいえ、特定の実証済みの実践に従わない場合は、自分の墓を掘っていることになります。サブクラス化は本質的に悪いことではありませんが、カテゴリ、プロトコル、およびブロックは非常に魅力的であるため、いずれにしてもそれらを優先します。