场景一
发帖流程:图片上传接口和发布接口。图片上传到服务器是比较耗时的操作需要异步处理,把图片上传到服务器后,服务器返回指定的图片url,我们将图片的url作为发布接口参数。
由于上传图片的操作是并发异步处理,所以我们不知道上传图片的操作什么时候完,所以我们需要用到调度组。
场景二
防止按钮的重复点击操作。当进入一个界面我们初始化按钮的enable = NO
,enable = Yes
必须需要满足两个业务需求才能够实现。所有就需要调度组,如果我们不使用调度组,那么我们必须将两个业务做成同步,必然会导致相应速度变慢。
使用方法
// 1. 调度组
dispatch_group_t group = dispatch_group_create();
// 2. 队列
dispatch_queue_t q = dispatch_get_global_queue(0, 0);
// 3. 将任务添加到队列和调度组
dispatch_group_enter(group);
dispatch_group_async(group, q, ^{
// 业务需求一
[self getLianHeLoginRequestSuccess:^{
// 离开群组
dispatch_group_leave(group);
} failure:^{
// 离开群组
dispatch_group_leave(group);
}];
});
dispatch_group_enter(group);
dispatch_group_async(group, q, ^{
// 业务需求二
[self loanDetailRequestSuccess:^{
// 离开群组
dispatch_group_leave(group);
} failure:^{
// 离开群组
dispatch_group_leave(group);
}];
});
// 4. 监听所有任务完成,这个函数是4,5异步的
dispatch_group_notify(group, q, ^{
NSLog(@"OVER %@", [NSThread currentThread]);
// 主线程刷新UI
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"OVER %@", [NSThread currentThread]);
[self.loanDetialScroller nowApplyButtonEnabled:YES];
self.nowApplyBottomButton .enabled = YES;
});
});
// 5. 判断异步
NSLog(@"come here");
// 如果需要换成同步的, 等待群组空,一直到永远,群组不空,这句代码就死等,4,5同步
// dispatch_group_wait(group, DISPATCH_TIME_FOREVER);