iOS-GCD详解及简单使用

2020-01-18 17:07:01于海丽

iOS-GCD 介绍

在开发过程中,我们有时会希望把一些操作封装起来延迟一段时间后再执行。iOS开发中,有两种常用的方法可以实现延迟执行,一种是使用GCD,另外一种是使用NSRunLoop类中提供的方法。

前言

对初学者来说,GCD似乎是一道迈不过去的坎,很多人在同步、异步、串行、并行和死锁这几个名词的漩涡中渐渐放弃治疗。本文将使用图文表并茂的方式给大家形象地解释其中的原理和规律。

线程、任务和队列的概念

iOS-GCD使用详解,iOS-GCD,整理资料,实例及详细介绍

异步、同步 & 并行、串行的特点

iOS-GCD使用详解,iOS-GCD,整理资料,实例及详细介绍

一条重要的准则

一般来说,我们使用GCD的最大目的是在新的线程中同时执行多个任务,这意味着我们需要两项条件:

    能开启新的线程 任务可以同时执行 结合以上两个条件,也就等价“开启新线程的能力 + 任务同步执行的权利”,只有在满足能力与权利这两个条件的前提下,我们才可以在同时执行多个任务。

 所有组合的特点

iOS-GCD使用详解,iOS-GCD,整理资料,实例及详细介绍

(一)异步执行 + 并行队列

实现代码:


//异步执行 + 并行队列
- (void)asyncConcurrent{
  //创建一个并行队列
  dispatch_queue_t queue = dispatch_queue_create("标识符", DISPATCH_QUEUE_CONCURRENT);
 
  NSLog(@"---start---");
 
  //使用异步函数封装三个任务
  dispatch_async(queue, ^{
    NSLog(@"任务1---%@", [NSThread currentThread]);
  });
  dispatch_async(queue, ^{
    NSLog(@"任务2---%@", [NSThread currentThread]);
  });
  dispatch_async(queue, ^{
    NSLog(@"任务3---%@", [NSThread currentThread]);
  });
 
  NSLog(@"---end---");
}

打印结果:

---start---

  ---end---

  任务3---{number = 5, name = (null)}

  任务2---{number = 4, name = (null)}

  任务1---{number = 3, name = (null)}

解释:

1.异步执行意味着

可以开启新的线程

任务可以先绕过不执行,回头再来执行

2.并行队列意味着

任务之间不需要排队,且具有同时被执行的“权利”