GCD group 用法 and 项目实践

在dispatch_queue中所有的任务执行完成后在做某种操作,这个需求在项目中非常常见,但是在并行队列中怎么处理,尤其是多个网络请求,那就用dispatch_group 成组操作:
项目背景:
一个 tableView 的两个 section 需要不同网络接口,而且必须要等到两个网络请求结束后再创建 tableView(类似的需求在项目中不要太多)

//第一步
dispatch_group_t dispatchGroup = dispatch_group_create();
dispatch_group_enter(dispatchGroup);
//enter方法显示的是group中的任务未执行完毕的任务数目加1,这种方式用在不使用dispatch_group_async来提交任务,要配合使用,有enter要有leave,这样才能保证功能完整实现。

//第二步
[AFNTool requestWithUrlString:@"xxxxxxx" params:dic success:^(NSDictionary *success) {
      //在这里处理你的数据, do what you want
      //这里的 leave 就是配合上面的 enter 来搭配使用
        dispatch_group_leave(dispatchGroup);
    } failure:^(NSError *error) {
        NSLog(@"%@",error);
      //失败也要 leave, enter和 leave 一定要成对 
        dispatch_group_leave(dispatchGroup);
    }];

接下来写第二个网络请求

dispatch_group_enter(dispatchGroup);
[AFNTool requestWithUrlString:@"xxxxxx" params:dict success:^(NSDictionary *success) {
// do something
//配合上面的 enter ,一个 enter 一个 leave
        dispatch_group_leave(dispatchGroup);
    } failure:^(NSError *error) {
        NSLog(@"%@",error);
        dispatch_group_leave(dispatchGroup);
  }];

为group设置通知一个block,当group关联的block执行完毕后,就调用这个block。


dispatch_group_notify(group, dispatch_get_main_queue(), ^{**
  // 在主线程处理 UI
}); 

大概就是这样,挺好用的,可以多试试

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作...
    曾令伟阅读 1,089评论 0 10
  • OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...
    克鲁德李阅读 466评论 0 0
  • 序言 目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了。今年,找过工作人可能会更深刻地体会到今年的就...
    Jack_lin阅读 78,633评论 110 1,946
  • 来自网络 序言 目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了。今年,找过工作人可能会更深刻地体会...
    用心在飞阅读 858评论 5 4
  • 25日凌晨00:30,郭德纲微博发文《天涯犹在,不诉薄凉。》,回应其前徒弟曹云金20天前文章对自己的指控。 当天下...
    亚愿阅读 377评论 0 0