GCD常用的几个方法

当app首页有多个接口的时候,一个个的去写是不是有点太菜了。这时我们就可以使用强大的GCD,用异步+并发,好处是如果多个任务,就会开启多个线程,并发处理。

/**返回并发队列
@param "com.home" 队列的名字 可以用bundle ID + 队列名字 
@param DISPATCH_QUEUE_CONCURRENT并发
                 DISPATCH_QUEUE_SERIAL 串行
@return 并发队列
*/
dispatch_queue_t queue =dispatch_queue_create("com.home",DISPATCH_QUEUE_CONCURRENT);
// 异步执行多个网络请求
dispatch_async(queue, ^{//并行异步执行
[self requestUserPersonalInformation];
[self requestBornerAndActivityDatas];
NSLog(@"任务一==%@",[NSThreadcurrentThread]);
});
dispatch_async(queue, ^{
NSLog(@"任务二==%@",[NSThreadcurrentThread]);
});

当app在多个请求结束后,再去刷新界面。这时候就可以用dispatch_group实现分组并发网络请求
在group中 enter和leave是一一对应的
dispatch_group_enter(group);//通知group,下面的任务马上要放到group中执行了。
dispatch_group_leave(group);//通知group,任务完成了,该任务要从group中移除了。


dispatch_group_t group = dispatch_group_create();
    dispatch_group_enter(group);
    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
     /*   //请求一
        [网络请求:{
        NSLog(@"任务一完成");
        成功 or 失败:dispatch_group_leave(group);
}];
*/
 [HJDHttpRequest netRequestPOSTWithRequestURL:@"app/login.do" WithParameter:requestUserDatas WithReturnValeuBlock:^(id responseObject, NSError *error) {
         NSLog(@"任务一完成");
        成功 or 失败:dispatch_group_leave(group);  
    });
    dispatch_group_enter;
    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        //请求二
        [网络请求:{
          NSLog(@"任务二完成");
          成功 or 失败:dispatch_group_leave(group);
}];
    });
//dispatch_group_wait  wait函数一直阻塞 这个函数返回 0则会继续执行,否则一直等待 group 组内的所有成员任务完毕(在任务开始前 调用 enter,任务完成时调用leave,完成就减1,直到0 为止)
   // dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

 dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        //界面刷新
        NSLog(@"任务均完成,刷新界面");
    });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一.dispatch_barrier_async 栅栏块 在一个自定义的并行队列中执行多个任务block时,如果接...
    小赢一场阅读 542评论 0 1
  • 本文主要介绍GCD一些API的使用,也就是注重实站! 一、GCD常用API1.并发队列2.串行队列3.设置自定义队...
    libtinker阅读 809评论 0 10
  • iOS 多线程系列 -- 基础概述iOS 多线程系列 -- pthreadiOS 多线程系列 -- NSThrea...
    shannoon阅读 666评论 0 5
  • 引言: 越是细节越能体现一个人的严谨,越是微小越是能看到事物的光芒 1. 队列 官方解释:DispathQueue...
    Chendy_Linda阅读 2,540评论 2 10
  • 一.进程&线程 进程:是程序执行过程中分配和管理资源的一个基本单位。 线程:是程序执行过程中任务调度和执行的一个基...
    wxhan阅读 544评论 0 3