iOS多线程之GCD深入理解

日期:2019-09-16编辑作者:编程应用

在 GCD 中,参与了五个特别重要的概念:义务和队列一个线程是能够享有多少个试行队列的,全部职务是增多到行列中等候推行的主队列是不一样经常的串行队列,自个儿制造的行列能够钦命串行或互相,全局队列是互相队列任务:即操作,你想要干什么,说白了就是一段代码,在 GCD 中就是叁个 Block,所以加多任务非常造福。职分有两种施行措施: 同步施行和异步施行,他们中间的分别主要在于会不会阻塞当前线程首先看上面那四个例子:1、

dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_SERIAL);dispatch_sync(queue, ^{NSLog(@"%d",[[NSThread currentThread] isMainThread]);});

图片 1

2、

dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_SERIAL);dispatch_async(queue, ^{NSLog(@"%d",[[NSThread currentThread] isMainThread]);});

图片 2

多少个例子都以开创贰个新队列,之间的界别只在乎前面一个是以联合运营,前面一个则是异步结果前者打字与印刷出1,后面一个则是0。大家分析一下,这里一齐的意味其实是对于线程的装有试行队列来说,正是说同步实施时,除了block职务,在同二个线程实践的别的队列全体中断施行,当block任务实行到位后,别的队列义务才过来实践。(这里还会有个要特别注意的,就是系统在辨别是不是要暂停队列的进行时,是坚守block职责是还是不是在队列头,借使不是就止住队列实践)上边例子第11中学开创一个新队列,block义务在首先个,即队列头,以联合实践时便是兼具在主线程施行的连串会中断实施(除了block职责所在队列)。例子2因为是开创三个新队列,又是异步实行,所以会创建贰个新线程施行,所以打字与印刷出来的0,也便是主线程上的行列照常推行。

为了证实自家下边包车型地铁假若,小编比如:3、

dispatch_queue_t queue = dispatch_get_main_queue();dispatch_sync(queue, ^{NSLog(@"%d",[[NSThread currentThread] isMainThread]);});

图片 3

4、

dispatch_queue_t queue = dispatch_get_main_queue();dispatch_async(queue, ^{NSLog(@"%d",[[NSThread currentThread] isMainThread]);});

图片 4

地点多个例子都以将block职责加多到主队列,可是结果却区别,例子3结果是世代不会实行打字与印刷语句,程序不会再进行了,例子4好端端执行,且在主队列中结论:不是异步就肯定会敞开新的线程

事例3因为将block职务加多到主队列中,此时主队列还也有职务(viewDidLoad未有推行完,所以block任务不是就要实践的职分),依据前边的类别判定,主队列被搁浅实践,此时后面的职分不能够完毕,前边的block职务也无法完结,产生死循环例子4校官职务增添到主队列中,即使是异步操作,可是并不会张开新的线程,因为在主队列中,要在主线程中实行,而异步操作不会将线程阻塞,所以队列照常试行。

简言之来说,同步操作那么block块职分会在当前线程中施行,譬喻上边在主线程中张开同步操作,那么早晚就是在主线程中进行,不管队列是主队列依旧大局队列可能本人创设的体系。若是是异步操作的话,那么就要分情况来看了,假使是主队列,那么便是在主线程中推行,若是是全局或协和创设的连串,那么正是在新创制的线程中实行,全局队列会依照义务自动制造三个或多少个线程,自个儿成立的队列便是基于参数设定和职务进行分红。

有关串行和相互,串行和相互是指向同多少个队列中的职责来讲的,当使用串行,那么队列里的那么队列里的职分最八只好利用三个线程运营,即一律时刻只有三个职务在试行,如若是互相,那么系统会依据队列里的职务自动分配线程推行,最大线程数依据参数设定

本文由今晚最快开奖现场直播发布于编程应用,转载请注明出处:iOS多线程之GCD深入理解

关键词:

GitHub Android Libraries Top 100 简单介绍

继上一篇 Android 学习资料搜聚获得大多响应,因而作者主宰再来一发,希望对您们全体帮忙 本项目根本对日前 GitHu...

详细>>

支付最好实施,Android最棒实践指南

Updated on 2016/2/14 更新Stetho 相关,简书markdown不支持锚-_-||||||||||||Updated on 2016/1/15表明谷歌对ADT的废弃态度,新增段落:...

详细>>

swift中自定义Log,iOS开发之自定义log

在我们日常开发中,打印输出作为调试手段还是占据相当大的一个比重的.但是打印又非常消耗性能,我们仅仅希望在调...

详细>>

浅析饿了么,仿抖音下拉刷新

难度:⭐️⭐️效果: 话不多说,先上DEMO记得star哦 下拉刷新 下拉进入活动会场 效果图 饿了么App在最近版本上线了...

详细>>