すべてのページについてjson形式でWebサービスからデータを取得し、リモートデータベースにデータを送信しているアプリケーションで作業しています。このプロセスでは、アプリケーションの速度が低下しています。データがWebサービスからフェッチされるまで次のビューが読み込まれません。時間がかかります。データの取得とビューの表示を同時に行う方法はありますか。スレッドプログラミングについて聞いたのですが、よくわかりません。どの手法を採用すればよいか教えてください。アプリケーションをより速く。どんな助けもいただければ幸いです。
3 に答える
Grand Central DispatchまたはNSInvocationOperationを使用して、バックグラウンドスレッドでロードを実行できます。
dispatch_queue_t q = dispatch_get_global_queue(0, 0);
dispatch_queue_t main = dispatch_get_main_queue();
dispatch_async(q, ^{
PagedSearchResult *result = // something which takes a while to complete
dispatch_sync(main, ^{
// update the UI
});
});
RayWenderlichのGrandCentralDispatchチュートリアルをご覧ください。
あなたの目的のために、標準を使用するのが最も簡単でしょうNSURLConnection
。箱から出して非同期です。完了ハンドラーでは、たとえばUIを更新したり、UI自体を更新するように通知したりできます。
NSURLRequest *request = [NSURLRequest requestWithURL:
[NSURL URLWithString:urlString]];
[NSURLConnection sendAsynchronousRequest:request
queue:self.queue
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
// do something with data or handle error
}];
これにより、バックグラウンドプロセスでデータのすべてのダウンロードとアップロードを行うように行うことができるため、ユーザーはデータがタスクを完了するまで待つ必要がありません。
バックグラウンドプロセスの場合、で簡単に使用できます
[self performSelectorInBackground:@selector(runProcessInBackground:) withObject:nil];
または、このhttps://stackoverflow.com/questions/9949248/iphone-sdk-running-a-repeating-process-in-a-background-threadを参照することもでき ます。
また、アプリケーションでページ付けを使用して、最初の呼び出しのようにデータを表示できます。uはWebサービスから最初の100レコードを受け取るだけなので、時間がかかり、100がフェッチされた後、ページが終了したときに別のレコードをロードします。これもあなたはあなたのアプリを増やすことができます。速度。
これがお役に立てば幸いです。