IOS 中什么是 GCD?它有哪些优缺点?代码举例讲解

GCD 是 Grand Central Dispatch 的缩写,它是 iOS 中进行多线程编程的一种方式。GCD 底层使用 C 语言编写,提供了同步(dispatch_sync)和异步(dispatch_async)两种执行任务的方式。

GCD 的主要优点:

  1. 简单易用,无需直接管理线程生命周期。
  2. 高效,可以最大限度利用系统资源。
  3. 安全,内置了对线程管理的封装。

但是 GCD 也有一定的缺点:

  1. 难以取消或管理已启动的任务。
  2. 任务执行结果无法取得。
  3. 任务依赖关系难以表示。

下面是一个使用 GCD 的代码示例:

objc
// 1. 获取全局队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

// 2. 异步执行任务
dispatch_async(queue, ^{
    for (int i = 0; i < 5; i++) {
        NSLog(@"%@ - %d",[NSThread currentThread], i);
    } 
});

// 3. 同步执行任务  
dispatch_sync(queue, ^{
    for (int i = 0; i < 5; i++) {
        NSLog(@"%@ - %d",[NSThread currentThread], i);
    }
});

// 4. 延时执行
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), queue, ^{
    // 1 秒后执行任务
});