2011-01-15 9 views
0

Vimeo API用に公開されているフレームワークを作成しています。このフレームワークは、インターネットから情報を取得する必要があります。これには時間がかかることがあるので、UIがハングしないようにthreadinを使用する必要があります。 FoundationはNSURLConnectionDelegateのようにこれに代理人を使用します。しかし、Game Kitはブロックをコールバック関数として使用します。インターネットから情報を取得するフレームワークを作成する場合は、ブロックを作成するかブロックを使用する必要がありますか?

これを行う推奨方法は何ですか?私はブロックが標準のGCCバージョンではサポートされていないことを知っていますが、私のフレームワークを使用するもののためのコードが少なくて済みます。

一方、代議員は実際の方法であり、プロトコルを使用する場合は、そのメソッドが実装されていると確信しています。

ありがとうございました。

答えて

2

私は本当にブロックが好きですが、この場合はデリゲートプロトコルを使用するように誘惑されます。ネットワーク接続は多数の方法で失敗する可能性があり、デリゲートはステートフルな情報を保持しがちです。私は、多くのオプションメソッドを持つデリゲートプロトコルにうまく対応していることがわかります。

ネットワークデータにアクセスするための非常に単純化されたAPIを提供している場合は、ブロックの成功/失敗のペアで十分です。個人的には、ステートフルなデリゲートオブジェクトに対して多くのデリゲートメソッドを使用するさまざまなケースに取り組まなければならないことがわかりました。例えば;すぐに失敗した接続を再試行するか、失敗した接続の相対的な優先順位を変更するか、部分的な応答をすることができますか、wifiへの接続を使用可能にすると接続を切り替える必要があります。 、接続の増分進捗状況を表示しますか?あなたはブロックを持つそれらのすべてを扱うことができますが、私はむしろ接続を管理するデリゲートクラスを持っていることがわかります。

インターフェイスのフェッチ対象となるデータの詳細がわからないと、私はもっと具体的なことは分かりませんが、わかりません。可能であれば、APIのユーザーが独自の接続状態を管理できるようにしたいと思います。

0

すべてはあなたのターゲットオーディエンスが誰であるかによって異なります。 OS X 10.5やiOS 3.x用のアプリケーションを作ってほしい人は、代理人を使う必要があります。それ以外の場合は、ブロックを使用してください。

+0

Mac OSのバージョンで良い点。 – d11wtq

+0

私は常に最新のiOSを対象にしているので、古い3.xでは問題ありません。Leopardのユーザーはまだ多いですか?よく分かりません。多くのアプリケーションは、10.5と10.6の両方で互換性があります。 –

0

どちらも有効なオプションなので、かなり主観的な質問ですが、Appleは「スローアウェイ」メソッドのブロックを使用する方向に向かっているようです。

0

主な質問はターゲットオーディエンスです。

ブロックはSnow Leopardに限られています(IOS 4?は覚えていません)。

以前のオペレーティングシステムでフレームワークを使用できるようにするには、ブロックを使用できません。

osの制限に満足している場合は、ブロックとNSOperationQueueを使用してください。本当に使いやすく簡単です。

より良い、あなたは両方のオプションを提供することができます。..

+0

どちらのオプションも悪い考えではありません。 #ifdefsを使用して、ブロックが使用可能かどうかを調べることができます。 –

0

私はブロックを使用することをお勧めします、とあなたは右のそれを行う場合は、同時に10.5をサポートすることができます。

オープンソースPLBlocks runtimeをチェックすると、10.5と10.6の両方でブロックをシームレスに使用することができます。

関連する問題