美文网首页
GCD的基本使用

GCD的基本使用

作者: lyonLiu | 来源:发表于2016-09-22 00:34 被阅读49次

创建队列

创建普通队列
第一个参数:C语言的字符串,标签
第二个参数:队列的类型
DISPATCH_QUEUE_SERIAL 串行队列
DISPATCH_QUEUE_CONCURRENT 并发队列

dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_CONCURRENT);

获得全局并发队列
第一个参数:优先级
第二个参数:此参数暂时无用,给未来使用,传0即可

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

使用Create函数创建的并发队列和全局并发队列的主要区别:

1.全局并发队列在整个应用程序中本身是默认存在的,并且对应有高优先级,默认优先级,低优先级和后台优先级一共四个并发队列,我们只是选择其中的一个直接拿来用。而Create函数是实打实的从头开始去创建一个队列
2.在iOS6.0之前,在GCD中凡是使用了带Create和retain的函数在最后都需要做一次release操作。而住队列和全局并发队列不需要我们手动release。当然了,在iOS6.0之后,GCD已经被纳入到了ARC的内存管理范畴中,即便是使用retain或者create函数创建的对象也不再需要开发人员手动释放,我们像对待普通OC对象一样对待GCD就可以了
3.在使用栅栏函数的时候,苹果官方明确规定栅栏函数只有在和使用create函数自己的创建的并发队列一起使用的时候才有效(没有给出具体原因)

四种使用方式

异步函数+并发队列
开启多条线程,队列中任务异步执行
并不是多少个任务就开多少个线程

- (void)asyncConcurrent
{
    // 1.创建队列
//    dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_CONCURRENT);
    
    // 获得全局并发队列
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
   
    // 2.1>封装任务 2.2>添加任务到队列中
    /**
     第一个参数:队列
     第二个参数:要执行的任务
     */
    dispatch_async(queue, ^{
        NSLog(@"download1--- %@",[NSThread currentThread]);
    });
    
    dispatch_async(queue, ^{
        NSLog(@"download2--- %@",[NSThread currentThread]);
    });
    
    dispatch_async(queue, ^{
        NSLog(@"download3-- %@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"download4-- %@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"download5-- %@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"download6-- %@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"download7-- %@",[NSThread currentThread]);
    });
}

异步函数+串行队列
会开启新线程,队列中任务是串行执行

- (void)asyncSerial
{
    dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_SERIAL);

    dispatch_async(queue, ^{
        NSLog(@"download1--- %@",[NSThread currentThread]);
    });
    
    dispatch_async(queue, ^{
        NSLog(@"download2--- %@",[NSThread currentThread]);
    });
    
    dispatch_async(queue, ^{
        NSLog(@"download3-- %@",[NSThread currentThread]);
    });
}

同步函数+并发队列
不会开线程,任务是串行执行的


- (void)syncConcurrent
{
    dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_CONCURRENT);

    dispatch_sync(queue, ^{
        NSLog(@"download1--- %@",[NSThread currentThread]);
    });
    
    dispatch_sync(queue, ^{
        NSLog(@"download2--- %@",[NSThread currentThread]);
    });
    
    dispatch_sync(queue, ^{
        NSLog(@"download3-- %@",[NSThread currentThread]);
    });
}

同步函数+串行队列
不会开线程,任务是串行执行的


- (void)syncSerial
{
    dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_SERIAL);
 
    dispatch_sync(queue, ^{
        NSLog(@"download1--- %@",[NSThread currentThread]);
    });
    
    dispatch_sync(queue, ^{
        NSLog(@"download2--- %@",[NSThread currentThread]);
    });
    
    dispatch_sync(queue, ^{
        NSLog(@"download3-- %@",[NSThread currentThread]);
    });
}

相关文章

  • iOS-多线程:GCD

    GCD 简介 GCD 任务和队列 GCD 的使用步骤 GCD 的基本使用(6种不同组合区别) GCD 线程间的通信...

  • 浅析多线程GCD

    GCD的基本使用代码

  • 多线程和AFN网络框架配合使用

    ios的多线程一般有NSOperation和GCD.NSOperation基本使用: GCD基本使用: 简单的多线...

  • iOS多线程--彻底学会多线程之『GCD』

    GCD 文章目录 GCD简介 任务和队列 GCD的使用步骤 队列的创建方法 任务的创建方法 GCD的基本使用 并行...

  • 多线程之GCD

    GCD介绍 1、GCD简介 2、GCD任务和队列 3、GCD 的基本使用 4、GCD 线程间的通信 5、GCD 的...

  • iOS GCD

    GCD 简介 GCD 任务和队列 GCD 的使用步骤 GCD 的基本使用(六种组合不同区别,队列嵌套情况区别,相互...

  • iOS多线程--GCD篇

    GCD 文章目录GCD简介任务和队列GCD的使用步骤队列的创建方法任务的创建方法GCD的基本使用并行队列 + 同步...

  • GCD多线程详解

    1. GCD 简介 2. GCD 任务和队列 3. GCD 的使用步骤 4. GCD 的基本使用(6种不同组合区别...

  • 多线程网络

    第一节 1.基本概念 2.线程安全 3.线程间通信 4.GCD GCD基本使用【重点】 GCD的栅栏函数 在使用栅...

  • # GCD基本使用

    GCD基本使用 GCD是iOS开发中常用的一种线程使用方法,相比NSThread来说,代码更加的底层一点,用了Bl...

网友评论

      本文标题:GCD的基本使用

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