之前已经介绍了dispatch_semaphore的底层实现,dispatch_group的实现是基于前者的。在看源码之前,我们先看一下我们是如何应用的。假设有这么场景:有一个A耗时操作,B和C两个网络请求和一个耗时操作C当ABC都执行完成后,刷新页面。我们可以用dispatch_group实现。
dispatch关键如下:
-(void)viewDidLoad{
[superviewDidLoad];
__blockNSIntegernumber=0;
dispatch_group_tgroup=dispatch_group_create();
//A耗时操作
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{
sleep(3);
number+=2222;
});
dispatch的代码
//B网络请求
dispatch_group_enter(group);
[selfsendRequestWithCompletion:^(idresponse){
number+=[responseintegerValue];
dispatch_group_leave(group);
}];
//C网络请求
dispatch_group_enter(group);
[selfsendRequestWithCompletion:^(idresponse){
number+=[responseintegerValue];
dispatch_group_leave(group);
}];
dispatch_group_notify(group,dispatch_get_main_queue(),^{
NSLog(@"%zd",number);
});
}
-(void)sendRequestWithCompletion:(void(^)(idresponse))completion{
//模拟一个网络请求
dispatch_queue_tqueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_async(queue,^{
sleep(2);
dispatch_async(dispatch_get_main_queue(),^{
if(completion)completion(@1111);
});
});
}
总之,dispatch给大家简单的介绍了一些,希望大家多看看。