1

すべてのページについてjson形式でWebサービスからデータを取得し、リモートデータベースにデータを送信しているアプリケーションで作業しています。このプロセスでは、アプリケーションの速度が低下しています。データがWebサービスからフェッチされるまで次のビューが読み込まれません。時間がかかります。データの取得とビューの表示を同時に行う方法はありますか。スレッドプログラミングについて聞いたのですが、よくわかりません。どの手法を採用すればよいか教えてください。アプリケーションをより速く。どんな助けもいただければ幸いです。

4

3 に答える 3

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チュートリアルをご覧ください。

于 2012-10-29T11:16:55.670 に答える
0

あなたの目的のために、標準を使用するのが最も簡単でしょう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
   }];
于 2012-10-29T11:27:43.970 に答える
0

これにより、バックグラウンドプロセスでデータのすべてのダウンロードとアップロードを行うように行うことができるため、ユーザーはデータがタスクを完了するまで待つ必要がありません。

バックグラウンドプロセスの場合、で簡単に使用できます

[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がフェッチされた後、ページが終了したときに別のレコードをロードします。これもあなたはあなたのアプリを増やすことができます。速度。

これがお役に立てば幸いです。

于 2012-10-29T11:22:14.650 に答える