dispatch_group_t(分派组)

  最近在复习一些ios开发的基础知识,在多线程这一章的时候,看到了分派组,想起了之前开发过程中遇到的一些坑,故写这篇blog,免得后来之人犯同样的错误。

  这个坑的场景大概是这样的,上传多张图片,图片上传完成之后,更新UI。之前老的方案是一张一张的传,传完一张再检查是否完成,这样的效率非常的低下,当时为了赶时间,也没太在意这件事情。现在想想,最佳方案还是使用dispatch_group_t(分派组)来做。

 下面一段代码,是从别的地方copy来的,用来说明分派组的作用和使用方法。

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.  group1
  22. group2
  23. group3
  24. updateUI

猜你喜欢

转载自blog.csdn.net/lvmaker/article/details/50696277
今日推荐