2

時間がかかるテーブルの2つのセクションを更新するメソッドがあります。私は次のようなことをしたい:

    dispatch_queue_t lowQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
    dispatch_queue_t mainQueue = dispatch_get_main_queue();

    dispatch_async(lowQueue, ^{
        NSArray *tempArray = // do long running task to get the data

        dispatch_async(mainQueue, ^{
            // update the main thread
            [self.activityIndicatorView stopAnimating];
            [self.reportsTableView reloadData];
        });
    });

dispatch_async(lowQueue, ^{

NSArray *tempArray2 = // same thing, do another long task

    // similarly, update the main thread

同じメソッドで同じlowQueueを使用する場合、それで問題ありませんか?ありがとう。

4

1 に答える 1

9

lowQueueはい、同じ方法でご利用いただけます。DISPATCH_QUEUE_PRIORITY_LOWグローバル キューを取得し、その参照を に保存すると、複数のGCD 呼び出しlowQueueを使用して追加のブロックを引き続きキューに入れることができます。dispatch_asyncを呼び出すたびdispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)に、まったく同じディスパッチ キューへの参照が返されます。

すべてのグローバル ディスパッチ キューはコンカレント キューであるため、2 つのタスクの両方からの各ブロックはキューから取り出され、同時に実行されます。これは、実行時にシステムにとって最も効率的であると GCD が判断した場合に限ります (システム負荷、使用可能な CPU コア、その他の数が与えられた場合)。現在実行中のスレッドなど)。

于 2012-11-07T17:51:34.137 に答える