iOS-GCD详解及简单使用

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

打印结果:

  ---start---

  ---end---

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

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

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

解释

异步执行意味着

可以开启新的线程

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

主队列跟串行队列的区别

队列中的任务一样要按顺序执行

主队列中的任务必须在主线程中执行,不允许在子线程中执行

以上条件组合后得出结果:

所有任务都可以先跳过,之后再来“按顺序”执行

步骤图

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

(六)同步执行+主队列(死锁)

实现代码:


- (void)syncMain{
  //获取主队列
  dispatch_queue_t queue = dispatch_get_main_queue();
 
  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要等主线程有空的时候(即主队列中的所有任务执行完)才能执行 主线程要执行完“打印end”的任务后才有空 “任务1”和“打印end”两个任务互相等待,造成死锁

步骤图

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


注:相关教程知识阅读请移步到IOS开发频道。