サーバーからjsonデータをダウンロードして処理するネットワークベースのiOSアプリを開発しています。ダウンロード タスクと処理タスクの両方が完了するまでにかなりの時間がかかる可能性があるため、どちらもメイン スレッドで実行したくありません。
これを行うには2つの方法があると思います:
を使用して非同期ロードを実行
NSURLConnection
し、didFinishLoading
メソッドでGCD (たとえば) を使用してバックグラウンドで処理を行います。GCD の
dispatch_async
(たとえば) を使用してバックグラウンドで作業を開始し,NSURLConnection's
sendSynchronousRequest:returningResponse:error
データを同期的にダウンロードするために使用します. データの処理を行いUI
ます. メインスレッドで更新を呼び出します.
特に、1 つの「データのダウンロード/処理」タスクにデータ ダウンロードのための複数の連続したサービス呼び出しが含まれる場合は、2 番目の方法の方が簡単に記述でき、よりクリーンなコードが生成されると思います。したがって、実行が次のようになるのではなく:
main (開始) -> バックグラウンド (ダウンロード) -> メイン (NSURLConnectionDelegate
メソッド) -> バックグラウンド (データ処理) -> メイン (UI
更新)
次のようになります。
メイン (開始) -> バックグラウンド (ダウンロード) -> バックグラウンド (データ処理) -> メイン (UI 更新) のほうがすっきりしているように見えます。
2 つの同様の質問が見つかりました: Grand Central Dispatch を使用したインターネット リクエストの良いパターン?
そして
NSURLConnection とグランドセントラルディスパッチ
そして、両方に対する答えは、方法1と概念的に似たものを使用することを示唆しているようです.
方法 2 で説明されていることを達成する適切な方法はありませんか?
前もって感謝します!