博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GCD的使用和面试题集锦
阅读量:6880 次
发布时间:2019-06-27

本文共 1455 字,大约阅读时间需要 4 分钟。

GCD 分为异步和同步

异步:

dispatch_async (  参数1  , {     }同步:dispatch_sync( 参数1   , { }

参数1 :队列

队列分为两种: dispatch_get_globle_queue(0,0) 全局队列dispatch_get_main_queue()主队列

全局队列 : 系统为程序员提供的队列

执行时机 : 在系统主线程空闲时才会执行
主队列: 系统在执行主线程时执行
执行时机 :一般从分线程跳转到主线程需要使用 主队列

全局队列和异步配合使用

主队列和同步配合使用

补充:其中队列还包含自己创建的 dispatch_queue_creat ( 参数1 , 参数2 )出来的

其中
参数1是 队列的名字标识
参数2 有两个选择

a.   DISPATCH_QUEUE_SERIAL  //是该队列是一个串行队列 即有序执行  b.  DISPATCH_QUEUE_CONCURRENT  //该队列是一个并发队列,在执行第一个的同时会不等前一个队列执行完,就会在其他线程中执行后一个队列或者其中的其他队列 (无次序之分)

面试题

- (void)viewDidLoad {//dispatch_sync(dispatch_get_main_queue(), ^{//NSLog(@3);//死锁原因//1:dispatch_sync在等待block语句执行完成,而block语句需要在主线程里执行,所以dispatch_sync如果在主线程调用就会造成死锁//2:dispatch_sync是同步的,本身就会阻塞当前线程,也即主线程。而又往主线程里塞进去一个block,所以就会发生死锁。//});//dispatch_async(dispatch_get_global_queue(), ^{//async 在主线程中 创建了一个异步线程 加入 全局并发队列,async 不会等待block 执行完成,立即返回NSLog(@2);//不会造成死锁;});}

分析这段代码:view DidLoad 在主线程中,也即dispatch_get_main_queue()中,执行到sync时向dispatch_get_main_queue()插入同步thread,sync会等到后面的block执行完成才返回。sync又在主队列里面,是个串行队列,sync是后面才加入的,前面一个是主线程,所以sync想执行block必须等待前一个主线程执行完成,而主线程却在等待sync返回,去执行后续工作,从而造成死锁。

2:

dispatch_sync 和 dispatch_async 区别:dispatch_async(queue,block) async 异步队列,dispatch_async 函数会立即返回, block会在后台异步执行。dispatch_sync(queue,block) sync 同步队列,dispatch_sync 函数不会立即返回,即阻塞当前线程,等待 block同步执行完成。

3:

GCD Queue 分为三种:1,The main queue :主队列,主线程就是在个队列中。2,Global queues : 全局并发队列。3,用户队列:是用函数 dispatch_queue_create 创建的自定义队列

转载于:https://www.cnblogs.com/zhao-jie-li/p/5522630.html

你可能感兴趣的文章
设计模式之四:访问者模式
查看>>
加密和解密
查看>>
python使用.proto文件生成service接口失败
查看>>
判断矩形是否在矩形中
查看>>
关于composer.json中require-dev和require-dev、autoload-dev和autoload的区别
查看>>
处理slave(低版本)复制master(高版本)产生的error 1236
查看>>
Vim(gvim)配色方案推荐
查看>>
变量的直接调整运用${variable # 或% }
查看>>
java利用dom4j递归输出所有节点
查看>>
[网络通信]WSAPoll使用
查看>>
Java虚拟机学习 - 垃圾收集器
查看>>
一个类可以实现多个有相同方法的接口
查看>>
Java使用jxl读取excel
查看>>
Grunt 插件开发与调式
查看>>
Python yield用法
查看>>
生成excel表报的控件FlexCel Studio for .NET
查看>>
使用SCVMM 2012 R2管理Hyper-v群集
查看>>
【开源社群系统研发日记五】ThinkSNS+ 是如何计算字符显示长度的
查看>>
Nodejs日志管理log4js
查看>>
php全文搜索引擎xunsearch的搭建
查看>>