美文网首页
GCD常用的几个方法

GCD常用的几个方法

作者: 古月纳兰 | 来源:发表于2017-10-30 12:38 被阅读0次

当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(@"任务均完成,刷新界面");
    });

相关文章

  • GCD常用的几个方法

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

  • GCD常用的几个方法

    一.dispatch_barrier_async 栅栏块 在一个自定义的并行队列中执行多个任务block时,如果接...

  • iOS多线程-GCD的几个常用方法

    1.GCD信号量:dispatch_semaphore (1)dispatch_semaphore_create创...

  • GCD常用方法

  • GCD常用方法

    本文主要介绍GCD一些API的使用,也就是注重实站! 一、GCD常用API1.并发队列2.串行队列3.设置自定义队...

  • GCD常用方法

    1、延迟做某些任务 2、多个任务同时进行,等任务全部完成之后去进行下一步操作。例如:下面的为网络刷新数据, 但是刷...

  • GCD 常用方法

    1. dispatch_async 异步添加到队列 Demo: 2. dispatch_after 延后添加到队列...

  • GCD常用方法

    //1、创建主线程(串行) dispatch_async(dispatch_get_main_queue(), ^...

  • GCD常用方法

    1.创建异步线程 2.创建同步线程 3.创建主线程 4.GCD只执行一次 5.线程延迟调用 6.信号量 dispa...

  • GCD常用方法

    执行一次代码 延迟执行 主线程睡眠3秒,该方法不推荐,因为会阻塞主线程,影响用户体验 该方法在哪个线程中调用则延迟...

网友评论

      本文标题:GCD常用的几个方法

      本文链接:https://www.haomeiwen.com/subject/lvyppxtx.html