1

Cocoaを初めて使用する他の多くの開発者と同様に、私はデリゲートとコントローラーの概念に苦労しています。私は基本を理解していますが、1つのことが私を悩ませています。事実上すべての説明は、「通常」または「単純な場合」(例として挙げているのはこれだけです)のコントローラーとデリゲートは同じオブジェクトになる傾向があると述べています。それは質問につながります:同じインターフェースオブジェクトに対してコントローラーとデリゲートをいつ分離したいですか?

4

1 に答える 1

2

デリゲートに別のクラスを使用する必要がある場合の2つの一般的なケースは次のとおりです。

  1. 同じデリゲートメッセージに応答して無関係なアクションを実行する必要がある場合、または
  2. 複数のビューまたはコントローラー間でデリゲートのロジックを共有したい場合。

最初の状況の例は、2つの無関係なテーブルを持つページです。それぞれUITableViewに独自のデリゲートが必要になるため、デリゲートとしてコントローラーを使用するにはif、各デリゲートメソッドで醜いステートメントが必要になります。この場合、個別のデリゲートを定義して使用することをお勧めします。

2番目の状況の例は、類似した構造のテーブルからのDBデータを表示する類似したページのグループです。ページ自体は十分に異なるため、コントローラー全体を再利用することはできません。デリゲートをコントローラーに配置することを選択した場合、テーブルビューのデータソースの背後にあるロジックのほとんどは同じになります。コードを共有デリゲート実装に配置し、各コントローラーに、このコントローラーに関連付けられたテーブルに固有の構成パラメーターを使用してそのデリゲートをインスタンス化させることができます。

デリゲートとしてコントローラー以外の別のオブジェクトを使用する場合は、注意が必要です。ビューはデリゲートへの参照を弱く/割り当てるだけなので、コントローラーはデリゲートへの強い参照を保持/保持する必要があります。詳細については、デリゲートのプロパティ「assign」および「retain」を参照してください。

于 2012-06-08T04:27:28.603 に答える