0

私はディスパッチ キューを初めて使用します。現在、このディスパッチ キューを介してバックグラウンド操作を呼び出そうとしています。

ここで疑問があります。これで私を助けてください。以下の例では、

whatQueue:- mainQueue、queueA、または新しいキューを作成する必要がありますか?

dispatch_queue_t queueA = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(queueA, ^{
     NSMutableArray * items = listofItems;
    for(NSString * str in items)
    {
         //Run a sync block to send str to server
        dispatch_sync(***whatQueue***, ^{

        });
    }
});

ありがとう、パニ

4

3 に答える 3

0

内部ブロックを同期的に実行する理由については、あまり説明していません。私はあなたが望むと仮定します:

  1. サーバーへの文字列の送信をシリアル化します。

  2. 続行する前に、すべての文字列が送信されるのを待ちます。

この場合、次のことができます。

  1. 同じ queueA でネットワーク タスクを実行します (新しいディスパッチは必要ありません)。

  2. 基盤となるネットワーク レイヤー (NSURLConnection/AFNetworking/ASIHTTP/...) が同期ネットワーク操作を実行していることを確認してください (そうしないと、ネットワーク リクエストがすぐに返され、独自のスレッドでバックグラウンドで完了します)。

于 2012-07-08T06:55:09.297 に答える
0

お返事をありがとうございます、

ユーザーインターフェイスに影響を与えずにオフラインデータをサーバーにプッシュしたいだけで、UI 上のものを更新したくありません。

そのため、メインのディスパッチ キューはすべてのレコードを反復し、ネストされたキューを使用してレコード同期モードを送信し、各要求の応答も処理する必要があります。

于 2012-07-08T06:58:57.890 に答える
0

ネストされたディスパッチに使用dispatch_get_main_queueします (結局のところ、UI の更新のためにメインスレッドで同期ディスパッチが必要だと思います)。それ以外の場合は、既にバックグラウンドで動作しているため、それ以上のディスパッチは必要ありません。

于 2012-07-08T06:36:59.710 に答える