一、简介

dispatch_group_enter:通知group,下面的任务马上要放到group中执行了。

dispatch_group_leave:通知group,任务完成了,该任务要从group中移除了。

这两种通知可以在多线程间自由穿梭的。

二、验证

下面用代码验证下它们的作用。

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    [self syncAction];
} - (void)syncAction{ dispatch_group_t group =dispatch_group_create();
dispatch_queue_t globalQueue=dispatch_get_global_queue(, ); dispatch_group_enter(group); //模拟多线程耗时操作
dispatch_group_async(group, globalQueue, ^{
sleep();
NSLog(@"%@---block1结束。。。",[NSThread currentThread]);
dispatch_group_leave(group);
});
NSLog(@"%@---1结束。。。",[NSThread currentThread]); dispatch_group_enter(group);
//模拟多线程耗时操作
dispatch_group_async(group, globalQueue, ^{
sleep();
NSLog(@"%@---block2结束。。。",[NSThread currentThread]);
dispatch_group_leave(group);
});
NSLog(@"%@---2结束。。。",[NSThread currentThread]); dispatch_group_notify(group, dispatch_get_global_queue(, ), ^{
NSLog(@"%@---全部结束。。。",[NSThread currentThread]);
}); }

运行app,点击页面打印的结果如下:

-- ::27.853 CPMNetworking[:] <NSThread: 0x600000068600>{number = , name = main}---1结束。。。
-- ::27.856 CPMNetworking[:] <NSThread: 0x600000068600>{number = , name = main}---2结束。。。
-- ::30.923 CPMNetworking[:] <NSThread: 0x608000263f00>{number = , name = (null)}---block1结束。。。
-- ::30.930 CPMNetworking[:] <NSThread: 0x6000002647c0>{number = , name = (null)}---block2结束。。。
-- ::30.930 CPMNetworking[:] <NSThread: 0x6000002647c0>{number = , name = (null)}---全部结束。。。

结论:

在开启了多线程执行任务时,若使用了dispatch_group_notify、dispatch_group_enter、dispatch_group_leave,也能有效的保证了等所有的子线程任务处理完后,有一个处理最后结果的地方。

最新文章

  1. 终端下vim无法输入问题解决
  2. [1]开发准备-使用C#.NET开发基于本地数据缓存的PC客户端
  3. NetLink Communication Mechanism And Netlink Sourcecode Analysis
  4. firefox浏览器不能使用window.close的解决方案
  5. (转)一个JavaWeb项目开发总结
  6. 多个git账号的配置
  7. 安装依赖包时--save-dev以及-save的区别及意义
  8. SvUDID实现设备唯一标示
  9. c++中的隐藏、重载、覆盖(重写)
  10. C51编译器的扩展关键字
  11. CSS之纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等)
  12. LPC1788系统时钟初始化
  13. Div.2 C. Dasha and Password
  14. 解决sql和beans中名字不一致问题
  15. linux tracepoint用法【转】
  16. android自定义listview实现header悬浮框效果
  17. ubuntu上安装multi-mechanize步骤
  18. Core统一日志处理
  19. Storm是什么
  20. centos7下kubernetes(6。运行应用)

热门文章

  1. DataGridView的DataGridViewComboBoxColumn列在编辑时自动弹出下拉列表
  2. jQuery 3.1.1 官方下载地址
  3. C# upnp
  4. AngularJS学习---REST和自定义服务(REST and Custom Services) ngResource step 11
  5. sqlserver,mysql,oracle通用的模拟和改进的全文搜索算法
  6. C# 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节
  7. mysql: symbol lookup error: /usr/local/lib/libreadline.so.6: undefined symbol: UP
  8. JS 获取服务器时间
  9. 20145225《Java程序设计》 2015—2016年学期课程总结
  10. c# 框架学习(nop )总结-------编辑功能