举个栗子:异步请求A图片和B图片和C图片,在最后合成ABC图
-(void)group{
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//这里走了个异步函数,该函数不等里边请求完毕就返回
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
sleep(3);
NSLog(@"A图片");
});
});
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"B图片");
});
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"C图片");
});
dispatch_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"合成图");
});
}
//打印顺序:
2018-04-06 16:01:16.960640+0800 COCOCOCO[13546:578928] B
2018-04-06 16:01:16.960675+0800 COCOCOCO[13546:578926] C
2018-04-06 16:01:16.961241+0800 COCOCOCO[13546:578877] D
2018-04-06 16:01:19.964354+0800 COCOCOCO[13546:578930] A
正确写法:
-(void)rightGroup{
dispatch_group_t group = dispatch_group_create();
dispatch_group_enter(group);
//这里不一定用dispatch_group_async,也可以dispatch_async
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
sleep(3);
NSLog(@"拿到A图片");
dispatch_group_leave(group);
});
});
dispatch_group_enter(group);
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
sleep(2);
NSLog(@"拿到B图片");
dispatch_group_leave(group);
});
dispatch_group_enter(group);
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
sleep(1);
NSLog(@"拿到C图片");
dispatch_group_leave(group);
});
dispatch_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"合成D图片");
});
}
打印:
2018-04-06 16:11:40.070776+0800 COCOCOCO[13688:585282] 拿到C图片
2018-04-06 16:11:41.072284+0800 COCOCOCO[13688:585280] 拿到B图片
2018-04-06 16:11:42.071223+0800 COCOCOCO[13688:585279] 拿到A图片
2018-04-06 16:11:42.071636+0800 COCOCOCO[13688:585221] 合成D图片