美文网首页iOS学习程序员iOS学习笔记
iOS深入理解GCD 第二篇(Dispatch Group)

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

作者: 镜花水月cy | 来源:发表于2017-09-08 15:31 被阅读36次

    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一定是最后输出的。这样一来我们就实现了文章开头的需求。

    相关文章

      网友评论

        本文标题:iOS深入理解GCD 第二篇(Dispatch Group)

        本文链接:https://www.haomeiwen.com/subject/niogjxtx.html