GCD的使用和面试题集锦
2016-05-24 10:46
323 查看
GCD 分为异步和同步
异步:
全局队列 : 系统为程序员提供的队列
执行时机 : 在系统主线程空闲时才会执行
主队列: 系统在执行主线程时执行
执行时机 :一般从分线程跳转到主线程需要使用 主队列
全局队列和异步配合使用
主队列和同步配合使用
补充:其中队列还包含自己创建的 dispatch_queue_creat ( 参数1 , 参数2 )出来的
其中
参数1是 队列的名字标识
参数2 有两个选择
分析这段代码:view DidLoad 在主线程中,也即dispatch_get_main_queue()中,执行到sync时向dispatch_get_main_queue()插入同步thread,sync会等到后面的block执行完成才返回。sync又在主队列里面,是个串行队列,sync是后面才加入的,前面一个是主线程,所以sync想执行block必须等待前一个主线程执行完成,而主线程却在等待sync返回,去执行后续工作,从而造成死锁。
3:
异步:
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 创建的自定义队列
相关文章推荐
- 调整数组顺序使奇数在前
- 面试题25
- 2016年 10 个最热门 IT 职业岗位
- 面试题 <丑数>(10)
- 面试遇到数据库题目总结
- Android面试必考基础题
- 500强企业专家级面试的难度果然是地狱级别,吐血分享成功经验
- 从打杂实习到一万五月薪,她只用了七天的时间
- 大学毕业4年-回顾和总结(9)-股权投资1年,给自己一个答卷(好狗狗、皇包车、职业梦、比呀比、易途8)(创业有风险,投资需谨慎)
- 大学毕业4年-回顾和总结(9)-股权投资1年,给自己一个答卷(好狗狗、皇包车、职业梦、比呀比、易途8)(创业有风险,投资需谨慎)
- 大学毕业4年-回顾和总结(9)-股权投资1年,给自己一个答卷(好狗狗、皇包车、职业梦、比呀比、易途8)(创业有风险,投资需谨慎)
- 这些HTML、CSS知识点,面试和平时开发都需要 No8-No9
- Java高级开发工程师面试考纲
- Android面试必考基础题
- 程序员的自我修养学习笔记
- 面试题:程序启动原理
- 面试总结一
- AsyncTask异步加载框架原理(面试会常问到的哦!!!)
- 【Morgan Stanley】AC面试
- 面试题24