iOS-GCD详解及简单使用

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

3.两者组合后的结果

开了三个新线程

函数在执行时,先打印了start和end,再回头执行这三个任务

这三个任务是同时执行的,没有先后,所以打印结果是“任务3-->任务2-->任务1”

步骤图

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

(二)异步执行 + 串行队列

实现代码:


//异步执行 + 串行队列
- (void)asyncSerial{
  //创建一个串行队列
  dispatch_queue_t queue = dispatch_queue_create("标识符", DISPATCH_QUEUE_SERIAL);
 
  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---

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

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

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

解释:

异步执行意味着

可以开启新的线程

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

串行队列意味着

任务必须按添加进队列的顺序挨个执行

两者组合后的结果

开了一个新的子线程

函数在执行时,先打印了start和end,再回头执行这三个任务

这三个任务是按顺序执行的,所以打印结果是“任务1-->任务2-->任务3”

步骤图

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

(三)同步执行 + 并行队列

实现代码:


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

打印结果:

---start---

  任务1---{number = 1, name = main}