您的位置:首页 > 理论基础 > 计算机网络

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 多个网络请求