(一)、多个网络请求的同步问题
解决1:通过添加标识来判断请求是否全部结束
用一个finishedCount变量记录完成请求的个数,然后在单个网络请求结束回调的时候判断当前完成的网络请求个数是否和总的网络请求个数相等,如果相等则说明请求结束。对于批量网络请求失败的处理是,只要一个失败就立即停止请求,调用失败回调:
解决2:dispatch_group + 信号量。处理异步任务的同步,当异步任务开始前调用dispatch_group_enter异步任务结束后调用dispatch_group_leve;当计数为0时会调用dispatch_group_notify。
- (void)groupSync
{
dispatch_group_t group = dispatch_group_create();
dispatch_group_enter(group);
dispatch_async(dispatch_get_global_queue(0, 0), ^{
sleep(5);
NSLog(@"任务一完成");
dispatch_group_leave(group);
});
dispatch_group_enter(group);
dispatch_async(dispatch_get_global_queue(0, 0), ^{
sleep(8);
NSLog(@"任务二完成");
dispatch_group_leave(group);
});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// 回到主线程刷新UI
NSLog(@"任务完成");
});
}
网友评论