若是想在dispatch_queue中全部的任务执行完成后在作某种操做,在串行队列中,能够把该操做放到最后一个任务执行完成后继续,可是在并行队列中怎么作呢。这就有dispatch_group 成组操做。好比async
dispatch_queue_t dispatchQueue = dispatch_queue_create("ted.queue.next", DISPATCH_QUEUE_CONCURRENT); dispatch_group_t dispatchGroup = dispatch_group_create(); dispatch_group_async(dispatchGroup, dispatchQueue, ^(){ NSLog(@"dispatch-1"); }); dispatch_group_async(dispatchGroup, dispatchQueue, ^(){ NSLog(@"dspatch-2"); }); dispatch_group_notify(dispatchGroup, dispatch_get_main_queue(), ^(){ NSLog(@"end"); });
上面的 log1 和log2输出顺序不定,由于是在并行队列上执行,当并行队列所有执行完成后,最后到main队列上执行一个操做,保证“end”是最后输出。 另外,这里也能够不用建立本身的并行队列,用全局的global,那个也是个并行队列. dispatch_get_gloable_queue(0,0);spa