使用GCD进行多文件下载时,我们可以很方便的使用dispatch_group进行管理。但是碰到网络请求都发出去了,想等到他们都响应,在执行下一步操作,有时候会惊奇的发现dispatch_group_notify()竟然在网络相应之前就已经“干净利落”的完成了,不是我们想要的。不要急,因为你的思路跑偏了,换个方向,用
dispatch_group_enter(group);//放入group
dispatch_group_async(,^{
//执行的任务
});
dispatch_group_leave(group);//离开group
就像这样一个结构,将一个一个的“请求+响应”作为一个整体,压入group里,
//这里无非就是创建组group
dispatch_group_enter(group);
[BNNetTools post:url params:parma success:^(id json) {
//完成操作。。。
dispatch_group_leave(group);
} failure:^(NSError *error) {
//完成操作。。。
dispatch_group_leave(group);
}];
//也可以这样写
dispatch_group_enter(group);
[BNNetTools post:url params:parma success:^(id json) {
//完成操作。。。
} failure:^(NSError *error) {
//完成操作。。。
}];
dispatch_group_leave(group);
//或者这样写
dispatch_group_enter(group);//放入group
dispatch_group_async(,^{
//执行的任务
[BNNetTools post:url params:parma success:^(id json) {
//完成操作。。。
dispatch_async(dispatch_get_main_queue(), ^{
//刷新UI
});
} failure:^(NSError *error) {
//完成操作。。。
dispatch_async(dispatch_get_main_queue(), ^{
//刷新UI
});
}];
});
dispatch_group_leave(group);//离开group
最后,别忘了,你要的获得他们都结束————dispatch_group_notify();