最近在复习一些ios开发的基础知识,在多线程这一章的时候,看到了分派组,想起了之前开发过程中遇到的一些坑,故写这篇blog,免得后来之人犯同样的错误。
这个坑的场景大概是这样的,上传多张图片,图片上传完成之后,更新UI。之前老的方案是一张一张的传,传完一张再检查是否完成,这样的效率非常的低下,当时为了赶时间,也没太在意这件事情。现在想想,最佳方案还是使用dispatch_group_t(分派组)来做。
下面一段代码,是从别的地方copy来的,用来说明分派组的作用和使用方法。
dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作。这个方法很有用,比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了。下面是一段例子代码:
- [cpp]
- dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
- dispatch_group_t group = dispatch_group_create();
- dispatch_group_async(group, queue, ^{
- [NSThread sleepForTimeInterval:1];
- NSLog(@"group1");
- });
- dispatch_group_async(group, queue, ^{
- [NSThread sleepForTimeInterval:2];
- NSLog(@"group2");
- });
- dispatch_group_async(group, queue, ^{
- [NSThread sleepForTimeInterval:3];
- NSLog(@"group3");
- });
- dispatch_group_notify(group, dispatch_get_main_queue(), ^{
- NSLog(@"updateUi");
- });
- dispatch_release(group);
- dispatch_group_async是异步的方法,运行后可以看到打印结果:
- group1
- group2
- group3
- updateUI