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全局队列并将对它的引用存储在 中时lowQueue,您可以继续使用多个dispatch_asyncGCD 调用将其他块加入队列。每次调用dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)时,都会返回对完全相同的调度队列的引用。

由于所有全局调度队列都是并发队列,两个任务中的每个块都将同时出列并执行,前提是 GCD 在运行时确定这对系统最有效(给定系统负载、可用 CPU 内核、其他数量)当前正在执行的线程等)。

于 2012-11-07T17:51:34.137 回答