前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS开发中利用dispatch group实现并发多任务

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

作者头像
用户1451823
发布2018-09-13 15:34:58
8470
发布2018-09-13 15:34:58
举报
文章被收录于专栏:DannyHoo的专栏DannyHoo的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337727

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

需求分析: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中的代码。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年04月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档