GCD group在多个网络请求的响应之前就已经执行

原创
2016/01/19 10:09
阅读数 1.1K

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

展开阅读全文
加载中

作者的其它热门文章

打赏
1
0 收藏
分享
打赏
1 评论
0 收藏
1
分享
返回顶部
顶部
返回顶部
顶部