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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/69668841

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏电光石火

Nexus3.x安装及配置

2K60
来自专栏点点滴滴

CentOS配置denyhosts配置

10520
来自专栏程序员同行者

构建NTP时间服务器

33820
来自专栏Java进阶架构师

一篇文章带你详解 HTTP 协议(下)

我们可以自行改变 RFC2616 中定义的状态码或者服务器端自行创建状态码,只要遵守状态码的类别定义就可以了。

11920
来自专栏运维小白

10.16/10.17/10.18 iptables nat表应用

nat表应用 A机器两块网卡ens33(192.168.202.130)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网...

21170
来自专栏吴柯的运维笔记

高性能反向代理服务器Varnish安装与使用

Varnish是一款高性能且开源的反向代理服务器和http加速器。 由于:Squid缓存在/var/spool/squid/硬盘下; Varnish缓存在内存...

38340
来自专栏张善友的专栏

Windows 下的安装phpMoAdmin

Windows7 下安装PHP非常容易,推荐使用WPI,通过框架和运行时选择PHP5.2安装: ? mongoDB 是以 PHP 扩展库 .dll 的形式与 P...

25470
来自专栏pangguoming

CentOS7下FTP的安装与配置

2.5K20
来自专栏Young Dreamer

webpack的Hot Module Replacement运行机制

使用webpack打包,难免会使用Hot Module Replacement功能,该功能能够实现修改、添加或删除前端页面中的模块代码,而且是在页面不刷新的前提...

34050
来自专栏java沉淀

用自己的电脑做网站服务器,实现外网访问

网站服务器其实就是一台大型的电脑主机,我们也可以将自己家的电脑主机去做成一台用于存放网站的网站小型服务器供别人访问。那么如何用自己的电脑去做网站服务器呢?由于...

13.1K80

扫码关注云+社区

领取腾讯云代金券