美文网首页iOS开发常用知识点
iOS多线程-GCD之同步和异步

iOS多线程-GCD之同步和异步

作者: Autolying | 来源:发表于2017-02-27 22:42 被阅读0次

上一篇 iOS多线程-GCD之串行队列和并行队列

在GCD中,同步和异步是由这两个函数来完成的:dispatch_syncdispatch_async

一、释义

void dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);
void dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

这两个函数的参数是一致的

第一个参数 queue 是即将要追加操作的队列
第二个参数 block 是要执行的操作(即代码块)

它们都会将要执行的操作立刻追加到队列中,区别在于,dispatch_sync会等待操作执行完毕,再执行函数外的操作;dispatch_async不会等待操作执行完毕,而是直接继续执行函数外的操作。

二、dispatch_sync

//获取一个全局队列
dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

//要执行的block
void (^blk)() = ^{
    NSLog(@"Execute block");
};

//同步执行操作
dispatch_sync(globalQueue, blk);
NSLog(@"Done!");

运行结果:

2017-02-27 22:36:32.362 GCDLearn[1196:88920] Execute block
2017-02-27 22:36:32.363 GCDLearn[1196:88920] Done!

三、dispatch_async

//异步执行操作, globalQueue、blk同上
dispatch_async(globalQueue, blk);
NSLog(@"Done!");

运行结果:

2017-02-27 22:38:09.014 GCDLearn[1219:90936] Done!
2017-02-27 22:38:09.014 GCDLearn[1219:91096] Execute block

四、理解

试着理解下面这部分代码

dispatch_queue_t serialQueue = dispatch_queue_create("com.gcd.syncAndAsyncMix.serialQueue", NULL);
dispatch_async(serialQueue, ^{
    NSLog(@"1");
});
dispatch_async(serialQueue, ^{
    NSLog(@"11");
});
dispatch_async(serialQueue, ^{
    NSLog(@"111");
});
dispatch_async(serialQueue, ^{
    NSLog(@"1111");
});
NSLog(@"2");
dispatch_sync(serialQueue, ^{
    NSLog(@"3");
});
NSLog(@"4");

运行结果:

2017-02-27 22:53:54.204 GCDLearn[1402:101052] 2
2017-02-27 22:53:54.204 GCDLearn[1402:101213] 1
2017-02-27 22:53:54.205 GCDLearn[1402:101213] 11
2017-02-27 22:53:54.206 GCDLearn[1402:101213] 111
2017-02-27 22:53:54.206 GCDLearn[1402:101213] 1111
2017-02-27 22:53:54.206 GCDLearn[1402:101052] 3
2017-02-27 22:53:54.207 GCDLearn[1402:101052] 4

对于串行队列来说,无论是sync还是async,操作执行的顺序与追加的顺序一致。

GCD学习代码 如果觉得有用,顺便给颗星哦😄
下一篇:iOS多线程-GCD之dispatch_set_target_queue

相关文章

  • 多线程

    iOS中的几种多线程GCD1、GCD分为任务和队列,任务(同步,异步)队列(串行,并发),同步串行,同步主队列的情...

  • iOS开发中的多线程

    iOS开发中的多线程 pthread,NSThread,NSOpertion,GCD的区别 同步和异步,并发和串行...

  • 多线程

    ios中为我们提供了GCD、NSOpration、NSThread 一、GCD多线程与锁GCD 同步异步、串行、并...

  • iOS多线程-GCD之dispatch_set_target_q

    上一篇 iOS多线程-GCD之同步和异步 一、释义 dispatch_set_target_queue 函数有两个...

  • 多线程相关面试问题

    多线程:GCD、NSOperation、NSThread。 一、GCD 1、同步/异步 和 串行/并发(1)、同步...

  • iOS多线程-GCD之同步和异步

    上一篇 iOS多线程-GCD之串行队列和并行队列 在GCD中,同步和异步是由这两个函数来完成的:dispatch_...

  • iOS开发多线程之GCD

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 GCD...

  • iOS开发之GCD并发队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 03 ...

  • iOS gcd看我就够了

    gcd是iOS中多线程的一种技术,下面我们来看看gcd的用法 同步&异步 同步 同步执行:字面意思,同步执行就是执...

  • iOS开发之GCD同步任务加强

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 004...

网友评论

    本文标题:iOS多线程-GCD之同步和异步

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