使用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();