在iOS开发当中我们有时候会碰到这样一个需求场景.例如有三个网络请求A,B,C.C这个网络请求需要等待A,B网络请求执行完并返回数据并拿着A,B两个网络请求的返回数据作为参数发起C的网络请求。小伙伴们一想到这个肯定是想着用dispatch_group_async()组函数。但是这样有个问题来了,发送网络请求是用的AFN发送的,是在block中获取数据。这样如何能保证A,B两个网络请求都接受到了数据才发起C的网络请求了。有个方法成功解决了这个问题。dispatch_group_enter(group)和dispatch_group_leave(group)方法,废话不多说上代码:
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0);
dispatch_group_enter(group);
dispatch_group_async(group, globalQueue, ^{
[self checkLogin:^{
// 网络请求A
dispatch_group_leave(group);
}];
});
dispatch_group_enter(group);
dispatch_group_async(group, globalQueue, ^{
[self checkLogin:^{
// 网络请求B
dispatch_group_leave(group);
}];
});
dispatch_group_enter(group);
dispatch_group_async(group, globalQueue, ^{
[self checkLogin:^{
// 网络请求C
dispatch_group_leave(group);
}];
});
ok成功解决异步当中还有异步的问题,完美解决数据返回的顺序问题。