NSData
には常に+dataWithContentsOfURL:options:error:
という非常に便利なメソッドがありました。便利ですが、現在のスレッドの実行もブロックされます。つまり、基本的にはプロダクションコードでは役に立ちませんでした(無視するNSOperation
)。私はこの方法をあまり使用しなかったので、それが存在することを完全に忘れてしまった。最近まで。NSURLConnectionとNSData + GCDの比較
NSURLConnectionDelegate
さまざまな方法を扱うダウンロードクラスを作成し、徐々にデータを構築し、エラーを処理しますできるだけ多くの要求に対して再利用できるほど十分です。
私の典型的なダウンローダクラスは、100行の球場のどこかで動作しているとします。これは、非同期的に行うための行で、NSData
は1行に同期して実行できます。より複雑になると、そのダウンローダクラスは、完了とエラーをその所有者に伝えるために独自のデリゲートプロトコルを必要とし、所有者は何らかの形でそのプロトコルを実装する必要があります。今
、グランドセントラル派遣を入力し、私は限り素晴らしくシンプルな何かを行うことができます:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
NSData* data = [NSData dataWithContentsOfURL:someURL];
// Process data, also async...
dispatch_async(dispatch_get_main_queue(), ^(void) {
// Back to the main thread for UI updates, etc.
});
});
そして私は右にライン、私が欲しいのどこにその吸盤を投げることができます。ダウンロードクラスを必要とせず、接続の代理メソッドを処理する必要もありません。わずか数行で簡単な非同期データです。このアプローチと私のGCD前アプローチとの間の格差は、あまりにも真のアラームであることをトリガするのに十分な大きさです。
NSURLConnection
の代わりにNSData
+ GCDを単純なデータダウンロードタスクに使用する場合の注意点がありますか(ダウンロードの進捗状況は気にしないと仮定します)?
私はあなたの進行状況の表示、キャンセル、および認証に同意します。 – Daniel