iOS开发中利用dispatch group实现并发多任务

现在有一个需求:某个页面中的数据是通过三个接口给出的,现在需要三个接口中的数据全部返回后再一起展示全部数据

需求分析:1.我们要将三个网络请求放在新开辟的子线程。 2.为了提高效率要将三个网络请求采用异步请求的方式。  3.要确保三个网络请求结束以后再进行展示数据的操作。

当遇到这样的需求的时候我们可以利用GCD中的组(group)来实现。我们将每个线程操作放到组中,在所有的线程操作完成之后回到主线程中进行UI页面的刷新。代码:

// 全局变量group

    dispatch_group_t group =dispatch_group_create();

    // 并行队列

    dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

    

    // 进入组(进入组和离开组必须成对出现,否则会造成死锁)

    dispatch_group_enter(group);

    dispatch_group_async(group, queue, ^{

        // 执行异步任务1

        [NSThreadsleepForTimeInterval:2];

        for (int i =0; i < 3; i ++) {

            NSLog(@"%d---%@", i, [NSThreadcurrentThread ]);    //子线程

        }

        _str1 =@"str1";

 dispatch_group_leave(group);

    });

   

    

    // 进入组

    dispatch_group_enter(group);

    dispatch_group_async(group, queue, ^{

        // 执行异步任务2

        [NSThreadsleepForTimeInterval:2];

        for (int i =3; i < 6; i ++) {

            NSLog(@"%d---%@", i, [NSThreadcurrentThread ]);

        }

        _str2 =@"str2";

        dispatch_group_leave(group);

    });

    

    

    dispatch_group_notify(group,dispatch_get_main_queue(), ^{

        NSLog(@"%@",_str1);

        NSLog(@"%@",_str2);

        NSLog(@"%@", [NSThreadcurrentThread]); //主线程

        NSLog(@"完成...");

    });


注意:代码中使用了dispatch_group_enter(group)和 dispatch_group_leave(group)是为了确保每个任务的完成,即使某个任务是异步的,在所有任务都完成后再执行notify中的代码。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值