IOS GCD详解

作者: 小生不cai | 来源:发表于2018-07-16 09:16 被阅读0次

1.首先我们搞清楚一下同步与异步的概念

同步执行(sync)

同步添加任务到指定的队列中,在添加的任务执行结束之前,会一直等待,直到队列里面的任务完成之后再继续执行。

只能在当前线程中执行任务,不具备开启新线程的能力。

异步执行(async):异步添加任务到指定的队列中,它不会做任何等待,可以继续执行任务。

可以在新的线程中执行任务,具备开启新线程的能力。

2.其次是要搞清楚并发队列与串行队列

串行队列(Serial Dispatch Queue)

每次只有一个任务被执行。让任务一个接着一个地执行。(只开启一个线程,一个任务执行完毕后,再执行下一个任务)

并发队列(Concurrent Dispatch Queue)

可以让多个任务并发(同时)执行。(可以开启多个线程,并且同时执行任务)

2.几种常用GCD的使用

们在创建单例、或者有整个程序运行过程中只执行一次的代码时,我们就用到了 GCD 的 dispatch_once 函数。如:

+ (DBManager *)sharedInstance{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        _sharedInstance = [[self alloc] init];

    });

    return _sharedInstance;

}

快速迭代dispatch_apply,按照指定的次数将指定的任务追加到指定的队列中,并等待全部队列执行结束。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

NSLog(@"apply---begin");

 dispatch_apply(6, queue, ^(size_t index) {

        NSLog(@"%zd---%@",index, [NSThreadcurrentThread]); 

 });

NSLog(@"apply---end");

队列组dispatch_group,我们常常需要这样一种操作:开一些线程,等待这些线程执行完了再继续下一步操作,这时我们可以用dispatch_group。

dispatch_queue_t dispatchQueue = dispatch_queue_create("ted.queue.next", DISPATCH_QUEUE_CONCURRENT);

    dispatch_group_t dispatchGroup = dispatch_group_create();

    dispatch_group_async(dispatchGroup, dispatchQueue, ^(){

        NSLog(@"dispatch-1");

    });

    dispatch_group_async(dispatchGroup, dispatchQueue, ^(){

        NSLog(@"dspatch-2");

    });

    dispatch_group_notify(dispatchGroup, dispatch_get_main_queue(), ^(){

        NSLog(@"end");

    });

延迟执行dispatch_after,

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

    });

相关文章

  • 线程

    iOS 多线程:『GCD』详尽总结 NSThread详解 IOS 多线程编程 『NSOperation、NSOpe...

  • iOS GCD详解《二》

    GCD详解 《一》[https://www.jianshu.com/p/7e83243a12a6]iOS GCD信...

  • iOS多线程相关面试题

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • 多线程之--NSOperation

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • iOS多线程之--NSThread

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • ios知识点(9)多线程

    iOS多线程GCD详解 使用GCD iOS多线程中,队列和执行的排列组合结果分析 存在一点小瑕疵,如果同步(syn...

  • GCD的使用

    GCD的详解iOS多线程--彻底学会多线程之『GCD』 GCD线程之间的通讯 一般在主线程里面刷新UI 点击、滚动...

  • iOS面试相关

    GCD 系列知识总结 NSOperation相关知识总结 iOS Runtime详解 黑魔法 Method_Swi...

  • GCD的学习笔记(Three)

    本文参考文章链接: 巧谈GCD iOS多线程详解 iOS多线程——你要知道的GCD都在这里(这篇存在着一些错误,慎...

  • (转)gcd简单使用和介绍

    本文转载自:时间已静止的简书:iOS多线程实现——GCD使用详解 一、介绍 GCD,英文全称是Grand Cent...

网友评论

    本文标题:IOS GCD详解

    本文链接:https://www.haomeiwen.com/subject/besvpftx.html