使用场景
在iOS开发过程中,当我们需要同时异步请求多个接口,在所有接口全部响应后才能执行后续操作时,我们可以用dispatch_group_t分组来实现。
原理
其实原理就是每一次添加一个请求就添加一个信号,成功或失败就减一个信号,直到最后分组中添加的信号与减去的信号一致时,执行dispatch_group_notify。
实现
dispatch_group_t dispatchGroup = dispatch_group_create();//创建信号组
//第一个请求
dispatch_group_enter(dispatchGroup);
[[HCAFN setAFNObject]GET:@"home/listArticle" parameters:param progress:^(NSProgress * _Nonnull downloadProgress){
} success:^(NSURLSessionDataTask * _Nonnull task,id _Nullable responseObject){
dispatch_group_leave(dispatchGroup);
NSLog(@"第一个");
} failure:^(NSURLSessionDataTask * _Nullable task,NSError * _Nonnull error){
dispatch_group_leave(dispatchGroup);
}];
//第二个请求
dispatch_group_enter(dispatchGroup);
[[HCAFN setAFNObject]GET:@"home/listArticle" parameters:param progress:^(NSProgress * _Nonnull downloadProgress){
} success:^(NSURLSessionDataTask * _Nonnull task,id _Nullable responseObject){
dispatch_group_leave(dispatchGroup);
NSLog(@"第二个");
} failure:^(NSURLSessionDataTask * _Nullable task,NSError * _Nonnull error){
dispatch_group_leave(dispatchGroup);
}];
//第三个请求
dispatch_group_enter(dispatchGroup);
[[HCAFN setAFNObject]GET:@"home/listArticle" parameters:param progress:^(NSProgress * _Nonnull downloadProgress){
} success:^(NSURLSessionDataTask * _Nonnull task,id _Nullable responseObject){
dispatch_group_leave(dispatchGroup);
NSLog(@"第三个");
} failure:^(NSURLSessionDataTask * _Nullable task,NSError * _Nonnull error){
dispatch_group_leave(dispatchGroup);
}];
dispatch_group_notify(dispatchGroup,dispatch_get_main_queue(),^(){
NSLog(@"三个都完成");
});
网友评论