创建一个任务组,把一组任务提交到一个或多个队列里面。
可以监听这个任务组在某个确定的队列里完成的通知,以执行后续的任务。
若提交到了多个队列里面,某一个队列完成任务的时候,其他队列不一定完成。
队列里的任务根据队列的属性来串行或者并行执行
示例:
- (IBAction)gcdGroupButtonAction:(UIButton *)sender {
//创建一个并行执行队列
dispatch_queue_t queue = dispatch_queue_create("queueIdentifier", DISPATCH_QUEUE_CONCURRENT);
dispatch_group_t group = dispatch_group_create();
//以下两个任务执行顺序不定,因为它们是并行任务
dispatch_group_async(group, queue, ^{
for (int i = 0; i<5; i++) {
NSLog(@"@thread:%@-------%i",[NSThread currentThread],i);
}
});
dispatch_group_async(group, queue, ^{
for (int i = 0; i<5; i++) {
NSLog(@"#thread:%@-------%i",[NSThread currentThread],i);
}
});
//当指定任务组的指定队列全部执行完成后执行如下代码
dispatch_group_notify(group, queue, ^{
NSLog(@"在%@队列中的任务组%@已执行完",queue,group);
});
}
输出如下:
@thread:{number = 3, name = (null)}——-0
@thread:{number = 3, name = (null)}——-1
@thread:{number = 3, name = (null)}——-2
@thread:{number = 3, name = (null)}——-3
@thread:{number = 3, name = (null)}——-4
#thread:{number = 3, name = (null)}——-0
#thread:{number = 3, name = (null)}——-1
#thread:{number = 3, name = (null)}——-2
#thread:{number = 3, name = (null)}——-3
#thread:{number = 3, name = (null)}——-4
在 < OS_dispatch_queue: queueIdentifier[0x17016ae00]>队列中的任务组已执行完