Dispatch groups是一种GCD功能,允许用户提交要分派到某些队列的块。关于队列,根据队列的类型调度块:如果队列是串行的,则块将相对于该队列串行执行;如果队列是并发的,则同时发生,但同时发生。
但是,关于该组,调度是相互串联还是同时发生的?我的意思是,如果一个组有一个调度队列队列和要调度的块,下一个调度是否只在前一个调度完成时执行?
答案 0 :(得分:7)
调度组中的成员资格与执行顺序无关。
调度组实际上只是一个计数器,dispatch_group_enter(group)
递增计数器,dispatch_group_leave(group)
递减计数器。
dispatch_group_async(group, queue, block)
是以下的快捷方式:
dispatch_group_enter(group);
dispatch_async(queue, ^{
block();
dispatch_group_leave(group);
});
即。通过dispatch_group_async(group, queue, block)
提交的块的执行顺序仅取决于指定的queue
。
当调度组计数器达到零(该组变空)时,dispatch_group_wait(group)
中的所有服务员都被唤醒,并且已通过dispatch_group_notify(group, queue, block)
提交给该组的所有服务器都是异步的到它们各自的queue
(即如果指定的queue
是并发/独立的,这些块可以同时执行。)