iOS深入理解GCD 第二篇(Dispatch Group)

Dispatch Group

在追加到Dispatch Queue中的多个任务处理完毕之后想执行结束处理,这种需求会经常出现。如果只是使用一个Serial Dispatch Queue(串行队列)时,只要将想执行的处理全部追加到该串行队列中并在最后追加结束处理即可,但是在使用Concurrent Queue 时,可能会同时使用多个Dispatch Queue时,源代码就会变得很复杂。

在这种情况下,就可以使用Dispatch Group。

- (void)GcdGroupexampleFirst {
    dispatch_group_t group = dispatch_group_create();
    dispatch_queue_t queue = dispatch_queue_create("com.gcd-jianshu.www", DISPATCH_QUEUE_CONCURRENT);
    
    dispatch_group_async(group, queue, ^{
        NSLog(@"group中的第一个--- %@",[NSThread currentThread]);
    });
    
    dispatch_group_async(group, queue, ^{
        NSLog(@"group中的第二个--- %@",[NSThread currentThread]);
    });
    
    dispatch_group_async(group, queue, ^{
        NSLog(@"group中的第三个--- %@",[NSThread currentThread]);
    });
    
    dispatch_group_notify(group, queue, ^{
        NSLog(@"done");
    });
}

控制台打印结果:

2017-09-08 15:24:48.877 GcdInsightTest[70557:3031178] group中的第二个--- <NSThread: 0x600000077dc0>{number = 4, name = (null)}
2017-09-08 15:24:48.877 GcdInsightTest[70557:3031177] group中的第一个--- <NSThread: 0x608000073500>{number = 3, name = (null)}
2017-09-08 15:24:48.877 GcdInsightTest[70557:3031180] group中的第三个--- <NSThread: 0x608000265540>{number = 5, name = (null)}
2017-09-08 15:24:48.877 GcdInsightTest[70557:3031180] done

```Dispatch Group
由打印结果可以看出,多个线程并行执行,所以追加处理的执行顺序不确定。执行顺序因此会发生变化,但此执行结果的done一定是最后输出的。这样一来我们就实现了文章开头的需求。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 简介 GCD(Grand Central Dispatch)是在macOS10.6提出来的,后来在iOS4.0被引...
    sunmumu1222阅读 953评论 0 2
  • 我们知道在iOS开发中,一共有四种多线程技术:pthread,NSThread,GCD,NSOperation: ...
    请叫我周小帅阅读 1,554评论 0 1
  • 背景 担心了两周的我终于轮到去医院做胃镜检查了!去的时候我都想好了最坏的可能(胃癌),之前在网上查的症状都很相似。...
    Dely阅读 9,389评论 21 42
  • 一、GCD的API 1. Dispatch queue 在执行处理时存在两种Dispatch queue: 等待现...
    doudo阅读 587评论 0 0
  • 电梯测试,测试的是一个人遇事反应能力,也是对你自己工作的了解能力的反应,电梯的30秒,测试你能不能把握机会,用最精...
    高密中百阅读 143评论 0 0

友情链接更多精彩内容