2

JSON API を介していくつかのものをロードするモデルModelがあり、それを何らかの方法で UI に表示します。時間に基づいてサーバーからフェッチされたインスタンスが 1 つしかないcurrentので、次のようなメソッド呼び出しがあるとします[Model current]

問題は、データの読み込み時に何かを行う必要があることです。これにより、2 つの解決策が考えられます。

  1. 委任 -コールバックを持つ[Model currentWithDelegate:self]プロトコルを実装する場所のようなものself
  2. ブロック -[Model currentWithSuccess:^(id response) { ... } error:^(NSError *error) { ... }]

私は JavaScript/Ruby 開発者なので、かなり慣れてい2.ますが、iOS で委譲がどのくらい頻繁に使用されるかを考えると、これがここでも正しいアプローチであるかどうかを考えています。

iOS で非同期を処理するためのデファクト スタンダードまたはベスト プラクティスは何ですか? 別のより良い方法はありますか?

4

2 に答える 2

2
于 2013-07-17T17:51:02.587 に答える
1

どちらもさまざまな理由で役立ちます。

ブロックは、オブジェクトの割り当てと一緒にコールバック コードを含めたい場合や、異なるコールバックが 1 つまたは 2 つしかない場合に便利です。

デリゲートは、潜在的に別のオブジェクトにコールバックを処理させたい場合や、1 つのオブジェクトにさまざまな他のオブジェクトのコールバックを処理させたい場合に便利です (もちろん、ブロックを使用してこれを行うこともできますが、デリゲート パターンを使用するとより自然になります)。デリゲートも便利です。明確に定義されたプロトコルがあるためです。これは、多数の異なるコールバック (必須の場合もあればオプションの場合もあります) があり、多くのブロック プロパティが必要になる場合に役立ちます。

通常、私は自分のコードでほとんどの場合ブロックを使用する傾向がありますが、デリゲートの方が意味がある場合は、代わりにそれらを使用してください。

于 2013-07-17T17:50:57.903 に答える