在iOS开发中经常会用到GCD,如果你在求职过程中GCD的使用也是面试官必问的,那么今天就来说说GCD的有关内容,不喜勿喷。

iOS开发交流技术群:563513413,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

一、GCD的概念

1.GCD全称是Grand Central Dispatch,可译为“CPU的中枢调度器”,是C语言,提供了非常多的强大的函数

2.GCD的优势:GCD是苹果公司为多核的并行运算提出的解决方案,它会自动利用更多的CPU内核(比如四核),而且它会自动管理线程的生命周期(创建线程、调度任务、销毁线程),开发者只需告诉GCD想要执行什么任务,不需编写任何线程管理代码。

二、GCD的核心

GCD的两个核心内容:任务和队列。

1.任务:执行什么样的操作;

2.队列:拿来存放任务。

三、GCD中执行任务的函数

1、同步函数:用同步的方式执行任务

dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);

2、异步函数:用异步的方式执行任务

dispatch_async(dispatch_queue_t queue, dispatch_block_t block)

同步和异步的区别:

同步:在当前线程中执行

异步:在另一条线程中执行

四、GCD相关内容

1.GCD中有4个术语比较容易混淆:同步、异步、并发、串行
2.同步和异步二者的主要影响:能否开启新的线程;
同步:在当前线程中执行任务,不具备开启新线程的能力
异步:在新的线程中执行任务,具备开启新线程的能力
3.并发和串行二者的主要影响:任务的执行方式
并发:多个任务并发(同时)执行
串行:一个任务执行完毕后,再执行下一个任务
注意:同步函数+主队列 == 死锁(会卡死)
(值得注意的是,同步任务有一个特性是,只要一添加到队列中就要立马执行,主队列中永远就只有一条线程——主线程,此时主线程在等待着主队列调度同步任务,而主队列发现主线程上还有任务未执行完,就不会让同步任务添加到主线程上,由此就造成了互相等待(主队列在等待主线程执行完已有的任务,而主线程又在等待主队列调度同步任务,此时就造成所谓的死锁了。)

五、创建(获取)队列的方式

1、串行队列:

(1). 使用dispatch_queue_create函数创建串行队列

dispatch_queue_t queue =dispatch_queue_create("Lotheve", NULL);

//参数分别为队列名称、队列属性(一般用NULL即可)

(2).获取主队列(主队列是一种特殊的串行队列,放在主队列中的任务,都会放到主线程中执行)

dispatch_queue_t queue = dispatch_get_main_queue();

2、并发队列:

使用dispatch_get_global_queue函数获得全局并发队列

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

第一个参数分别为全局队列优先级,进程中存在3个全局队列:低、中(默认)、高三个优先级队列,这里选择默认的。第二个参数暂时无用,用0即可。

结论:今天的分享到这就结束了。


蓝天
32 声望5 粉丝