在后台处理方法中使用相同的调度队列

时间:2012-11-07 17:42:14

标签: ios grand-central-dispatch

我有一个方法可以更新表中需要一段时间的两个部分。我想做点什么:

    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,那可以吗?感谢。

1 个答案:

答案 0 :(得分:9)

是的,您可以在同一方法中使用lowQueue。当您抓取DISPATCH_QUEUE_PRIORITY_LOW全局队列并在lowQueue中存储对其的引用时,您可以继续使用多个dispatch_async GCD调用将其他块排入其中。每次调用dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)时,您都会获得对完全相同的调度队列的引用。

由于所有全局调度队列都是并发队列,因此只要GCD确定在运行时对系统最有效(给定系统负载,CPU内核可用,当前正在执行的其他线程数等)。