在用AFN 做多张图片上传的时候,实际上是开启了多个异步线程,在实际上传图片的过程中可能出现个别上传不成功,于是想到了“调度组”,将该异步执行的方法放入调度组中,使用调度组进行监听,同时暂时阻塞处理该方法的队列,等处理完成后再在该队列进行后续操作(通知用户或发出刷新UI通知操作),使用AFN上传图片,实际上内部已经创建了异步线程和全局主队列,开始上传图片的时候只需要加入调度组即可,每次上传成功出组,当所有的图片都上传成功的时候dispatch_group_notify(group, dispatch_get_main_queue(), ^{} 监听到所有异步任务完成再处理其他操作。
// 队列
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
// 调度组
dispatch_group_t group = dispatch_group_create();
// 1. 进入群组,给 group 打一个标记,在后续紧接着的 block 归 group 监听
// dispatch_group_enter 和 dispatch_group_leave 必须成对出现!
// 1. 进入群组
dispatch_group_enter(group);
dispatch_async(queue, ^{
[NSThread sleepForTimeInterval:10];
NSLog(@"download A - %@", [NSThread currentThread]);
// 耗时操作代码
// 2. 离开群组
dispatch_group_leave(group);
});
// 等待群组空,一直到永远,群组不空,这句代码就死等,同步
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
NSLog(@"OK");
}
// 3. 监听所有任务完成
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"OVER %@", [NSThread currentThread]);
});