3

オブジェクトに構成情報を提供するためにいつ DataSource パターンを使用するか、いつプロパティを使用するかについてよく混乱します。

これを行うには2つの方法がありますが、

一般に、構成する必要があるオブジェクトのクラスに多くのプロパティを保持し、オブジェクトをリセットして新しいプロパティを続行するメソッドを保持します。

そして、他のオブジェクトを構成しているオブジェクトに対して、configureXYZ:WithValues: という名前のメソッドを保持します。このメソッドは、プロパティをリセットし、構成するオブジェクトのリセット メソッドを呼び出します。

これは、MPMoviePlayerController で見たもので、プロパティを設定する必要があります。

その他の方法は、tableView がどのように機能するかです。すべての構成情報は、データソース メソッドから取得されます。

どのシナリオでどの方法が優先されるかについて、誰でもより多くの光を当てることができますか?

デザインパターンを使用してコードをスタイリッシュに見せたいと思うことがよくありますが、実際にこれらがいつ必要になるかを知りたかったのです。私は委任パターンを完全に理解しており、定期的に使用する必要があります。DataSource は、私が明確に理解できなかったものの 1 つです。

4

2 に答える 2

4

クラスを設計するとき、デリゲートとプロパティのどちらを使用するかを決定する際に考慮すべき重要な要素は、値が変更される頻度です。プロパティは、一度値を設定し、二度と変更しない場合に最適に機能します。デリゲート (データソースは単なる例です) は、値が時間の経過や条件によって変化する可能性がある場合に最適に機能します。

たとえば、 ではUITableView、行数は非常に動的です。テーブルビューの制御外の多くの理由で変更される可能性があります。行が表すものは非常に動的です。それらはデータである可能性があります。それらはメニューオプションかもしれません。それらはゲームのピースかもしれません。UITableViewそれを推測したり制御したりしようとしません。非常に複雑な決定が下される可能性があるデリゲート (データソース) に移動します。

MPMoviePlayerController非常に具体的なことを意味するいくつかのコントロールがあり、ほとんど変更されることはありません (特にムービーの再生が開始されると)。基本的に、あなたは物事をセットアップし、殴っplayて立ち去ります。その場合、デリゲートはやり過ぎになる可能性があります。

中途半端なケースが多く、どちらでもいいのかもしれません。開発者には、まず委譲を検討し、それが意味をなさない場合はプロパティを検討することをお勧めします。これは委任が常に正しい答えだからというわけではありませんが、C++ または Java の教育を受けたほとんどの開発者は委任の観点から考えないため、そうするように意識的に努力する必要があります。

これらの行に沿った他のいくつかの考え:

  • プロパティを使用する場合、初期化時に構成され、その後は不変であることが理想的です。これにより、多くの問題が解決されます。

  • 多くのプロパティが必要な場合は、委譲の方が適切であり、多くの場合単純です。

  • デリゲート通知メソッド ( somethingDidHappen:) は、多くの場合、ブロックとして実装する方が適切です。(ブロックは ObjC では比較的新しいものです。デリゲート ベースの Apple インターフェースの多くはブロックに移行していますが、歴史的な理由から実際に混在していることがわかります。)

  • 「デリゲート」と「データソース」の違いは、デリゲートが動作を管理し、データソースがデータを提供することです。通常、それらは同じように実装されます。

于 2012-09-10T14:03:48.817 に答える
2

それは主にクラスのダイナミクスに依存します。UITableView は非常に動的なインターフェイス要素です。そのデータは行き来します。追加/削除/編集/並べ替えができます。あなたはそれと対話することができます。プロパティを tableView に割り当てると、堅牢なプロパティの一部が失われます。一方、MPMoviePlayerController には別の目的があります。このクラスを使用したことはありませんが、見た目から、1 つのビデオ ファイルを読み取り、再生を提供します。それに多くの変更はないので、プロパティは非常に理にかなっています。

クラスを作成していて、そのクラスを可能な限り柔軟にする必要がある場合 (UIPickerView、UITableView)、デリゲートを使用するとそれが可能になります。クラスが初期化後に制限された構成でのみ機能する場合は、プロパティ アプローチを採用することで改善される可能性があります。

于 2012-09-10T13:45:39.410 に答える