使用GCD进行多文件下载时,咱们能够很方便的使用dispatch_group进行管理。可是碰到网络请求都发出去了,想等到他们都响应,在执行下一步操做,有时候会惊奇的发现dispatch_group_notify()居然在网络相应以前就已经“干净利落”的完成了,不是咱们想要的。不要急,由于你的思路跑偏了,换个方向,用json
dispatch_group_enter(group);//放入group网络
dispatch_group_async(,^{async
//执行的任务
post
});url
dispatch_group_leave(group);//离开groupspa
就像这样一个结构,将一个一个的“请求+响应”做为一个总体,压入group里,3d
//这里无非就是建立组grouporm
dispatch_group_enter(group);get
[BNNetTools post:url params:parma success:^(id json) {it
//完成操做。。。
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();