Cocoaを初めて使用する他の多くの開発者と同様に、私はデリゲートとコントローラーの概念に苦労しています。私は基本を理解していますが、1つのことが私を悩ませています。事実上すべての説明は、「通常」または「単純な場合」(例として挙げているのはこれだけです)のコントローラーとデリゲートは同じオブジェクトになる傾向があると述べています。それは質問につながります:同じインターフェースオブジェクトに対してコントローラーとデリゲートをいつ分離したいですか?
1 に答える
デリゲートに別のクラスを使用する必要がある場合の2つの一般的なケースは次のとおりです。
- 同じデリゲートメッセージに応答して無関係なアクションを実行する必要がある場合、または
- 複数のビューまたはコントローラー間でデリゲートのロジックを共有したい場合。
最初の状況の例は、2つの無関係なテーブルを持つページです。それぞれUITableView
に独自のデリゲートが必要になるため、デリゲートとしてコントローラーを使用するにはif
、各デリゲートメソッドで醜いステートメントが必要になります。この場合、個別のデリゲートを定義して使用することをお勧めします。
2番目の状況の例は、類似した構造のテーブルからのDBデータを表示する類似したページのグループです。ページ自体は十分に異なるため、コントローラー全体を再利用することはできません。デリゲートをコントローラーに配置することを選択した場合、テーブルビューのデータソースの背後にあるロジックのほとんどは同じになります。コードを共有デリゲート実装に配置し、各コントローラーに、このコントローラーに関連付けられたテーブルに固有の構成パラメーターを使用してそのデリゲートをインスタンス化させることができます。
デリゲートとしてコントローラー以外の別のオブジェクトを使用する場合は、注意が必要です。ビューはデリゲートへの参照を弱く/割り当てるだけなので、コントローラーはデリゲートへの強い参照を保持/保持する必要があります。詳細については、デリゲートのプロパティ「assign」および「retain」を参照してください。