我有一个方法可以更新表中需要一段时间的两个部分。我想做点什么:
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,那可以吗?感谢。
答案 0 :(得分:9)
是的,您可以在同一方法中使用lowQueue
。当您抓取DISPATCH_QUEUE_PRIORITY_LOW
全局队列并在lowQueue
中存储对其的引用时,您可以继续使用多个dispatch_async
GCD调用将其他块排入其中。每次调用dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)
时,您都会获得对完全相同的调度队列的引用。
由于所有全局调度队列都是并发队列,因此只要GCD确定在运行时对系统最有效(给定系统负载,CPU内核可用,当前正在执行的其他线程数等)。