美文网首页
GCD之Dispatch Queue

GCD之Dispatch Queue

作者: 子键_北京不眠夜 | 来源:发表于2016-06-08 18:10 被阅读60次

要添加工作到队列Dispatch Queue中,这个队列可以是串行或者并行的,并行队列会尽可能的并发执行其中的工作任务,而串行队列每次只能运行一个工作任务。
目前GCD中有三种类型的Dispatch Queue:

  • Main Queue:关联到主线程的队列,可以使用函数dispatch_get_main_queue()获得,加到这个队列中的工作都会分发到主线程运行。主线程只有一个,因此很明显这个是串行队列,每次运行一个工作。
  • Global Queue:全局队列是并发队列,又根据优先级细分为高优先级、默认优先级和低优先级三种。通过dispatch_get_global_queue加上优先级参数获得这个全局队列,例如- dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
  • 自定义Queue:自己创建一个队列,通过函数dispatch_queue_create创建,例如dispatch_queue_create("com.kiloapp.test", NULL)。第一个参数是队列的名字,Apple建议使用反DNS型的名字命名,防止重名;第二个参数是创建的queue的类型,iOS 4.3以前只支持串行,即DISPATCHQUEUESERIAL(就是NULL),iOS4.3以后也开始支持并行队列,即参数DISPATCHQUEUECONCURRENT。

由于有这些种不同类型的队列,一种常见的使用模式是:

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  
    [self doHardWorkInBackground];
    dispatch_async(dispatch_get_main_queue(), ^{
         [self updateUI];
    });
});

将一些耗时的工作添加到全局队列,让系统分配线程去做,工作完成后再次调用GCD的主线程队列去完成UI相关的工作,这样做就不会因为大量的非UI相关工作加重主线程负担,从而加快UI事件响应。

相关文章

  • GCD回顾

    GCD的API DISPATCH_QUEUE_SERIAL / DISPATCH_QUEUE_CONCURRENT...

  • OC中GCD使用

    一、GCD的使用: dispatch_async(dispatch_queue_t queue, dispatch...

  • GCD你所需要知道的

    Dispatch Queues GCD的基本概念就是dispatch queue。dispatch queue是一...

  • 多线程GCD

    1:GCD 创建队列: 串行队列: dispatch_queue_t queue=dispatch_queue_c...

  • Grand Central Dispatch

    GCD的API 1. Dispatch Queue Dispatch Queue分为两种 如何得到Dispatch...

  • GCD-源码分析

    GCD源码分析 dispatch_queue_create dispatch_queue_create队列创建方法...

  • GCD与Dispatch Queue

    什么是GCD与Dispatch Queue? GCD:是Grand Central Dispatch缩写,是App...

  • iOS多线程-GCD之Dispatch Group

    上一篇 iOS多线程-GCD之dispatch_set_target_queue 一、释义 dispatch_gr...

  • iOS常用代码块demo1

    1.GCD定时器 dispatch_queue_t queue = dispatch_get_global_que...

  • GCD研究

    //创建gcd容器(全局队列)并行 dispatch_queue_t queue0 = dispatch_get_...

网友评论

      本文标题:GCD之Dispatch Queue

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