GCD group在多個網絡請求的響應以前就已經執行

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

相關文章
相關標籤/搜索