需求: 三个并发的网络请求,都完成之后,更新UI
实现:利用dispatch group 的dispatch_group_enter(group)和 dispatch_group_leave(group)确保每个任务的完成,即使某个任务是异步的,在所有任务都完成后再执行notify中的代码
代码:
dispatch_group_t upload_group = dispatch_group_create();
// 并行队列
dispatch_queue_t upload_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
// 进入组和离开组必须成对出现,否则会造成死锁
dispatch_group_enter(upload_group);// 进入组
dispatch_group_async(upload_group, upload_queue, ^{
// 任务1
dispatch_group_leave(upload_group);// 完成之后离开组
});
dispatch_group_enter(upload_group);// 进入组
dispatch_group_async(upload_group, upload_queue, ^{
// 任务2
dispatch_group_leave(upload_group);// 完成之后离开组
});
dispatch_group_notify(upload_group, dispatch_get_main_queue(), ^{
// 完成
});
网友评论