iOS之Dispatch

一. GCD簡(jiǎn)述

GCD谈飒,全稱(chēng)是Grand Central Dispatch猾昆,是APPLE為多核編程提出的解決方法戳粒。GCD會(huì)自動(dòng)管理線程的生命周期(創(chuàng)建線程路狮、調(diào)度任務(wù)、銷(xiāo)毀線程)蔚约,GCD編程的兩個(gè)核心概念是:

  • Dispatch Queue(隊(duì)列)
  • 任務(wù): 任務(wù)是放在隊(duì)列中的Block中,然后Block由相應(yīng)的線程執(zhí)行涂籽。

1. 在GCD中苹祟,Dispatch Queue可分為下面三種類(lèi)型:

(1)main queue:主線程串行隊(duì)列,通過(guò)dispatch_get_main_queue() 獲得,這是一個(gè)與主線程相關(guān)的串行隊(duì)列树枫。

dispatch_queue_t mainQueue = dispatch_get_main_queue()```
(2)global queue:全局隊(duì)列是系統(tǒng)提供的一個(gè)隊(duì)列直焙,該隊(duì)列拿過(guò)來(lái)就能用,按執(zhí)行方式來(lái)說(shuō)砂轻,全局隊(duì)列應(yīng)該稱(chēng)得上是并行隊(duì)列奔誓。在獲取全局隊(duì)列的時(shí)候要知道其隊(duì)列的優(yōu)先級(jí),通常情況下搔涝,優(yōu)先級(jí)越高的隊(duì)列就越先執(zhí)行厨喂。

dispatch_queue_t globalQueue = dispatch_get_global_queue(priority, 0)

  • parameter priority:
    DISPATCH_QUEUE_PRIORITY_HIGH //高
    DISPATCH_QUEUE_PRIORITY_DEFAULT //默認(rèn)
    DISPATCH_QUEUE_PRIORITY_LOW //低
    DISPATCH_QUEUE_PRIORITY_BACKGROUND //后臺(tái)
(3)用戶(hù)隊(duì)列:通過(guò)函數(shù)`dispatch_queue_create()`手動(dòng)創(chuàng)建的串行隊(duì)列或并行隊(duì)列,手動(dòng)創(chuàng)建需要收到釋放庄呈。

dispatch_queue_t dispatch_queue_create(const char *label, dispatch_queue_attr_t attr) // 隊(duì)列名稱(chēng)蜕煌, 隊(duì)列類(lèi)型(串行、并行)
dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_CONCURRENT) // 創(chuàng)建并行隊(duì)列
dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_SERIAL) // 創(chuàng)建串行隊(duì)列
dispatch_release(queue) // 由dispatch_queue_create方法生成的Dispatch Queue并不能由ARC來(lái)自動(dòng)管理內(nèi)存诬留,需手動(dòng)釋放隊(duì)列

## 2.GCD中一些系統(tǒng)提供的常用dispatch方法
(1)dispatch_sync 和 dispatch_async  同步和異步執(zhí)行操作

dispatch_sync(queue, block) //提交block給指定queue進(jìn)行同步執(zhí)行
dispatch_async(queue, block) //提交block給指定queue進(jìn)行異步執(zhí)行

dispatch_async() 調(diào)用以后立即返回不會(huì)阻塞當(dāng)前線程繼續(xù)執(zhí)行斜纪,dispatch_sync() 調(diào)用以后等到block執(zhí)行完以后才返回,dispatch_sync()會(huì)阻塞當(dāng)前線程文兑,關(guān)于同步和異步后面會(huì)詳細(xì)介紹盒刚。
(2)dispatch_after  延時(shí)添加到隊(duì)列

dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, 3*NSEC_PER_SEC)
dispatch_queue_t mainQueue = dispatch_get_main_queue()
dispatch_after(delayTime, mainQueue, ^{
NSLog(@"3秒之后添加到隊(duì)列")
})

(3)dispatch_barrier_async 等待在dispatch_barrier_async之前加入隊(duì)列的任務(wù)全部執(zhí)行完成之后,再執(zhí)行dispatch_barrier_async中的任務(wù)

dispatch_barrier_async(conCurrentQueue, ^{
NSLog(@"dispatch barrier")
})

假設(shè)我們?cè)扔?個(gè)任務(wù)要執(zhí)行绿贞,我們現(xiàn)在要插入一個(gè)任務(wù)0因块,這個(gè)任務(wù)0要在1、2樟蠕、3都并發(fā)執(zhí)行完了之后才能執(zhí)行贮聂,而4、5寨辩、6號(hào)任務(wù)要在這個(gè)任務(wù)0結(jié)束后才允許并發(fā)吓懈。大致的意思就跟下面這個(gè)圖一樣:
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/3375220-d224a2f62dde6bb1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市靡狞,隨后出現(xiàn)的幾起案子耻警,更是在濱河造成了極大的恐慌,老刑警劉巖甸怕,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甘穿,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡梢杭,警方通過(guò)查閱死者的電腦和手機(jī)温兼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)武契,“玉大人募判,你說(shuō)我怎么就攤上這事荡含。” “怎么了届垫?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵释液,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我装处,道長(zhǎng)误债,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任妄迁,我火速辦了婚禮寝蹈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘判族。我一直安慰自己躺盛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布形帮。 她就那樣靜靜地躺著槽惫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辩撑。 梳的紋絲不亂的頭發(fā)上界斜,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音合冀,去河邊找鬼各薇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛君躺,可吹牛的內(nèi)容都是我干的峭判。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼棕叫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼林螃!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起俺泣,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤疗认,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后伏钠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體横漏,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年熟掂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缎浇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赴肚,死狀恐怖华畏,靈堂內(nèi)的尸體忽然破棺而出鹏秋,到底是詐尸還是另有隱情尊蚁,我是刑警寧澤亡笑,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站横朋,受9級(jí)特大地震影響仑乌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜琴锭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一晰甚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧决帖,春花似錦厕九、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至刻像,卻和暖如春畅买,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背细睡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工谷羞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溜徙。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓湃缎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蠢壹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嗓违,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容