创建group
dispatch_group_create();
group异步执行
dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, block);
group执行完毕通知
dispatch_group_notify(dispathc_group_t group, dispatch_queue_t queue, block);
group同步执行
dispatch_group_enter(dispatch_group_t group);
dispatch_group_leave(dispatch_group_t group);
group挂起
dispatch_group_wait(dispatch_group_t group, dispatch_time_t time);
例子:
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
NSLog(@"task1");
});
dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
NSLog(@"task2");
});
dispatch_group_notify(group, dispatch_get_main_queue(), ^ {
NSLog(@"isover1");
});
dispatch_async(dispatch_get_global_queue(0, 0), ^{
for (int i = 0; i < 3; i ++) {
dispatch_group_enter(group);
NSLog([NSString stringWithFormat:@"task%i", i + 10]);
dispatch_group_leave(group);
}
});
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"isover2");
});
输出
2016-06-28 17:24:34.417 GCD group[14824:1091174] task2
2016-06-28 17:24:34.417 GCD group[14824:1091165] task1
2016-06-28 17:24:34.417 GCD group[14824:1091178] task10
2016-06-28 17:24:34.418 GCD group[14824:1091178] task11
2016-06-28 17:24:34.418 GCD group[14824:1091178] task12
2016-06-28 17:24:34.421 GCD group[14824:1091130] isover2
2016-06-28 17:24:34.421 GCD group[14824:1091130] isover1
说明:
dispatch_group_notify在所有任务执行完成后执行,dispatch_group_wait在notify之前执行。