IOS Grand Central Dispatch(GCD)教程 - niancan/doc GitHub Wiki

GCD(Grand Central Dispatch)介绍

GCD属于系统级的线程管理,在Dispatch queue中执行需要执行的任务性能非常的高。
GCD已经开源,地址http://libdispatch.macosforge.org。
GCD中的FIFO队列称为dispatch queue,用来保证先进来的任务先得到执行。

基本概念

  • 系统标准两个队列
//全局队列,一个并行的队列
DispatchQueue.global()
//主队列,主线程中的唯一队列,一个串行队列
DispatchQueue.main
  • 自定义队列
//并行队列
DispatchQueue(label: "QueueName", attributes: .concurrent)
//串行队列
DispatchQueue(label: "QueueName")
  • 延迟执行
DispatchQueue.global().asyncAfter(deadline: .now() + 3) {
    //task
}

dispatch_group

dispatch_group是GCD(Grand Central Dispatch)中的一组方法,他有一个组的概念,
可以把相关的任务归并到一个组内来执行,通过监听组内所有任务的执行情况来做相应处理。

dispatch_group的使用主要方法

  • dispatch_group_create

    创建任务组,创建任务组后才能把任务加入进组内。

  • dispatch_group_async

    通过异步执行任务。

    void dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block);

  • dispatch_group_enter

    用于添加对应任务组中的未执行完毕的任务数,执行一次,未执行完毕的任务数加1,当未执行完毕任务数为0的时候. 才会使dispatch_group_wait解除阻塞和dispatch_group_notify的block执行。

    void dispatch_group_enter(dispatch_group_t group);

  • dispatch_group_leave

  • dispatch_group_notify

  • dispatch_group_wait

⚠️ **GitHub.com Fallback** ⚠️