dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作。这个方法很有用,比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了。下面是一段例子代码:

  1. [cpp]
  2. dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
  3. dispatch_group_t group = dispatch_group_create();
  4. dispatch_group_async(group, queue, ^{
  5. [NSThread sleepForTimeInterval:1];
  6. NSLog(@"group1");
  7. });
  8. dispatch_group_async(group, queue, ^{
  9. [NSThread sleepForTimeInterval:2];
  10. NSLog(@"group2");
  11. });
  12. dispatch_group_async(group, queue, ^{
  13. [NSThread sleepForTimeInterval:3];
  14. NSLog(@"group3");
  15. });
  16. dispatch_group_notify(group, dispatch_get_main_queue(), ^{
  17. NSLog(@"updateUi");
  18. });
  19. dispatch_release(group);
  20. dispatch_group_async是异步的方法,运行后可以看到打印结果:
  21. 2012-09-25 16:04:16.737 **Test[43328:11303] group1
  22. 2012-09-25 16:04:17.738 **Test[43328:12a1b] group2
  23. 2012-09-25 16:04:18.738 **Test[43328:13003] group3
  24. 2012-09-25 16:04:18.739 **Test[43328:f803] updateUi

复制代码

每个一秒打印一个,当第三个任务执行后,upadteUi被打印。3、dispatch_barrier_async的使用

dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行

例子代码如下:

  1. [cpp]
  2. dispatch_queue_t queue = dispatch_queue_create("**test.rongfzh.yc", DISPATCH_QUEUE_CONCURRENT);
  3. dispatch_async(queue, ^{
  4. [NSThread sleepForTimeInterval:2];
  5. NSLog(@"dispatch_async1");
  6. });
  7. dispatch_async(queue, ^{
  8. [NSThread sleepForTimeInterval:4];
  9. NSLog(@"dispatch_async2");
  10. });
  11. dispatch_barrier_async(queue, ^{
  12. NSLog(@"dispatch_barrier_async");
  13. [NSThread sleepForTimeInterval:4];
  14. });
  15. dispatch_async(queue, ^{
  16. [NSThread sleepForTimeInterval:1];
  17. NSLog(@"dispatch_async3");
  18. });

复制代码

打印结果:

2012-09-25 16:20:33.967 **Test[45547:11203] dispatch_async1
2012-09-25 16:20:35.967 **Test[45547:11303] dispatch_async2
2012-09-25 16:20:35.967 **Test[45547:11303] dispatch_barrier_async
2012-09-25 16:20:40.970 **Test[45547:11303] dispatch_async3
请注意执行的时间,可以看到执行的顺序如上所述。

4、dispatch_apply
执行某个代码片段N次。

  1. dispatch_apply(5, globalQ, ^(size_t index) {
  2. // 执行5次
  3. });

复制代码

原文链接:http://www.2cto.com/kf/201209/157722.html

点击返回按钮以后,取消gcd子线程

dispatch_suspend(downloadNewsQueue);
dispatch_release(downloadNewsQueue);
downloadNewsQueue=nil;

注意:gcd在使用时,也要判断一下downloadNewsQueue是否为nil

参考:http://www.cocoachina.com/bbs/simple/?t129464.html

dispatch_group_async 使用详解的更多相关文章

  1. iOS开发——GCD多线程详解

    GCD多线程详解 1. 什么是GCD Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,简单来说,GCD就是iOS一套解决多线程的机制,使用GCD能够最大限度简化多线程 ...

  2. 《招一个靠谱的移动开发》iOS面试题及详解(下篇)

    iOS面试知识点 现在进入本篇的正题.本篇的面试题是我认为比较好的iOS开发基础知识点,希望大家看过这后在理解的基础上掌握而不是死记硬背.死记硬背很快也会忘记的. 1 iOS基础 1.1 父类实现深拷 ...

  3. 《招一个靠谱的移动开发》iOS面试题及详解(上篇)

    以下问题主要用于技术的总结与回顾 主要问题总结 单例的写法.在单利中创建数组应该注意些什么. NSString 的时候用copy和strong的区别. 多线程.特别是NSOperation 和 GCD ...

  4. Swift - 多线程GCD详解

    //  GCD详解 //  目录: //  1. 创建GCD队列(最常用) //  2. 自定义创建队列 //  3. 使用多线程实现延迟加载 //  4. 使用多线程实现重复(循环) //  5. ...

  5. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  6. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  7. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  8. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  9. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

随机推荐

  1. java collection和Iterator

    Collection是描述所有 序列容器的共性的根接口,它可以被认为是一个"附属接口",即因为要表示其他若干个接口的共性而出现的接口,另外,java.uitl.AbstaractC ...

  2. Java编程的逻辑 (61) - 内存映射文件及其应用 - 实现一个简单的消息队列

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  3. .NetCore中使用AspectCore、ExceptionLess 实现AOP操作日志记录

    结合前面封装的ExceptionLess,接下来使用 AspectCore 实现AOP日志处理 nuget导入AspectCore.Core .AspectCore.Extensions.Depend ...

  4. 记录一起k8s的service服务名解析灵异事件

    故障现象: 基于alpine 3.7的镜像,构建的spring boot服务及eureka服务器. 在使用deployment和service文件部署到k8s集群之后, 在不同的pod内部,访问ser ...

  5. 浏览器Quirksmode(怪异模式)与CSS1compat

    在js中如何判断当前浏览器正在以何种方式解析?   document对象有个属性compatMode ,它有两个值: BackCompat     对应quirks modeCSS1Compat   ...

  6. 【测试工具】http协议调试利器fiddler使用教程

    转自:http协议调试利器fiddler使用教程http://bbs.phpchina.com/thread-207418-1-1.html Fiddler真乃神器!它和市面上常见的很多web调试器. ...

  7. EntityFramework 系列:实体类配置-根据依赖配置关系和关联

    EF实体类的配置可以使用数据注释或Fluent API两种方式配置,Fluent API配置的关键在于搞清实体类的依赖关系,按此方法配置,快速高效合理.为了方便理解,我们使用简化的实体A和B以及A.B ...

  8. MySQL的lock tables和unlock tables的用法(转载)

    早就听说lock tables和unlock tables这两个命令,从字面也大体知道,前者的作用是锁定表,后者的作用是解除锁定.但是具体如何用,怎么用,不太清楚.今天详细研究了下,总算搞明白了2者的 ...

  9. 初识thinkphp(4)

    这次内容是数据库的使用方法 因为在第一章讲过就是拿index这个文件写的数据库的访问,这次实验我使用文件是系统默认的首页 配置的内容也在那里有提过就不重发戳图了. 数据库按照手册上的建议建了3行的内容 ...

  10. 异常日志框架Exceptionless结合.NET Core(本地部署)

    一.前言 1.分布式异常日志收集框架Exceptionless是开源的工具,根据官方给出的说明: Exceptionless可以为您的ASP.NET.Web API.WebFrm.WPF.控制台和MV ...