跳到主要内容

简述GCD有哪些方法 api ?

参考答案:

GCD(Grand Central Dispatch)是Apple提供的一套多线程编程的解决方案。它提供了一套强大的API,用于在应用程序中创建、管理和调度任务。以下是GCD中常用的一些方法和API:

  1. 创建队列

    • dispatch_queue_create(const char *label, dispatch_queue_attr_t attr): 创建一个新的dispatch队列。label是队列的标签,用于调试;attr决定了队列的类型,如串行或并行。
  2. 异步执行

    • dispatch_async(dispatch_queue_t queue, dispatch_block_t block): 将block异步提交到指定的队列中执行。
  3. 同步执行

    • dispatch_sync(dispatch_queue_t queue, dispatch_block_t block): 将block同步提交到指定的队列中执行。调用此方法的线程会等待block执行完成才继续执行后续代码。
  4. 一次性执行

    • dispatch_once(dispatch_once_t *predicate, dispatch_block_t block): 确保block只被执行一次,即使多次调用dispatch_once
  5. 延迟执行

    • dispatch_after(dispatch_time_t when, dispatch_queue_t queue, dispatch_block_t block): 在指定的时间后,将block提交到指定的队列中执行。
  6. 队列组

    • dispatch_group_create(): 创建一个新的dispatch组。
    • dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block): 将block异步提交到队列中,并添加到组中。
    • dispatch_group_notify(dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block): 当组中所有任务都完成时,执行指定的block。
  7. 信号量

    • dispatch_semaphore_create(long value): 创建一个信号量,并设置其初始值。
    • dispatch_semaphore_wait(dispatch_semaphore_t dsema, dispatch_time_t timeout): 等待信号量可用。
    • dispatch_semaphore_signal(dispatch_semaphore_t dsema): 增加信号量的计数。
  8. 主队列

    • dispatch_get_main_queue(): 获取与主线程相关联的队列。通常用于在主线程上执行UI更新等操作。
  9. 全局队列

    • dispatch_get_global_queue(dispatch_queue_priority_t priority, unsigned long flags): 获取全局并发队列。
  10. 队列优先级

    • GCD提供了不同的队列优先级,如DISPATCH_QUEUE_PRIORITY_DEFAULTDISPATCH_QUEUE_PRIORITY_HIGHDISPATCH_QUEUE_PRIORITY_LOWDISPATCH_QUEUE_PRIORITY_BACKGROUND等。

此外,GCD还提供了一些其他API和功能,如设置自定义队列的优先级、队列的暂停与重启、栅栏操作等。

使用GCD时,开发者应充分利用其异步执行和并发处理的能力,同时避免死锁、竞争条件等线程安全问题。在实际开发中,根据任务的性质和需求,选择适当的队列类型和优先级,以及合理地组合使用不同的API,以实现高效且安全的并发编程。