GCD group在多个网络请求的响应之前就已经执行
2016-01-19 00:00
639 查看
摘要: 有些朋友,想知道多个网络请求最终一个什么时候结束,比如在都结束时显示一个“全部加载完毕”、“已经加载完成”。。。。之类的提示
使用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();
使用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();
相关文章推荐
- 详解iOS中多线程app开发的GCD队列的使用
- gcd
- OC多线程
- 多线程应该知道的那几件事 GCD NSThread NSOperation
- 多线程编程4 - GCD
- 多线程学习资源
- block && Grand Central Dispatch
- GCD使用指南
- 关于GCD执行任务的理解
- iOS GCD编程
- IOS之多线程
- 2分钟学会GCD
- Problem 1612 Hero's gcd
- 欧几里得算法的证明
- 使用GCD
- GCD学习 dispatch_barrier_async
- hdu1452因子和的积性函数
- hdu1852
- Swift常见引用循环及解决方案
- 计算两个数的最大公约数 gcd(a,b)