博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dispatch_group_async 使用详解
阅读量:6281 次
发布时间:2019-06-22

本文共 2035 字,大约阅读时间需要 6 分钟。

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. });
复制代码

原文链接:

 

 

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

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

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

参考:

 

 

 

转载地址:http://byxva.baihongyu.com/

你可能感兴趣的文章
Vue实例初始化的选项配置对象详解
查看>>
PLM产品技术的发展趋势 来源:e-works 作者:清软英泰 党伟升 罗先海 耿坤瑛
查看>>
vue part3.3 小案例ajax (axios) 及页面异步显示
查看>>
浅谈MVC3自定义分页
查看>>
.net中ashx文件有什么用?功能有那些,一般用在什么情况下?
查看>>
select、poll、epoll之间的区别总结[整理]【转】
查看>>
CSS基础知识(上)
查看>>
PHP中常见的面试题2(附答案)
查看>>
26.Azure备份服务器(下)
查看>>
mybatis学习
查看>>
LCD的接口类型详解
查看>>
Spring Boot Unregistering JMX-exposed beans on shutdown
查看>>
poi 导入导出的api说明(大全)
查看>>
Mono for Android 优势与劣势
查看>>
将图片转成base64字符串并在JSP页面显示的Java代码
查看>>
js 面试题
查看>>
sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
查看>>
腾讯云下安装 nodejs + 实现 Nginx 反向代理
查看>>
Javascript 中的 Array 操作
查看>>
java中包容易出现的错误及权限问题
查看>>