GCD筆記

說明

Grand Gentral Dispatch(GCD) 異步執(zhí)行任務(wù)的技術(shù)之一。將應(yīng)用程序中記述的線程管理用的代碼在系統(tǒng)級(jí)中實(shí)現(xiàn)。我們只需要定義需要執(zhí)行的任務(wù)并追加到適當(dāng)?shù)腄ispatch Queue中。

Dispatch Queue

在執(zhí)行處理包含兩種Dispatch Queue,一種是等待現(xiàn)在執(zhí)行中的處理Serial Dispatch Queue ,另一種是不等待現(xiàn)在執(zhí)行中處理的Concurrent Dispatch Queue 。

創(chuàng)建Dispatch Queue

一.dispatch_queue_create

dispatch_queue_create方法第一個(gè)參數(shù)為創(chuàng)建的dispatch_queue_t的類型。第二個(gè)參數(shù)為dispatch_queue_t的名字,可以為NULL。建議命名,調(diào)試時(shí)會(huì)方便很多。

-.創(chuàng)建一個(gè)Serial Dispatch Queue,代碼:

dispatch_queue_t mySerialDispatchQueue = dispatch_queue_create("com.example.gcd.MySerialDispatchQueue",NULL);

雖然Serial Dispatch Queue是需要等待執(zhí)行中處理的,但是dispatch_queue_create是可以創(chuàng)建的,創(chuàng)建的多個(gè)Serial Dispatch Queue的話會(huì)變成并行。每一個(gè)Serial Dispatch Queue都占一條線程。

-.創(chuàng)建一個(gè)Concurrent Dispatch Queue,代碼:

dispatch_queue_t myConcurrentDispatchQueue = dispatch_queue_create("com.example.gcd.MyConcurrentDispatchQueue",DISPATCH_QUEUE_CONCURRENT);

dispatch_queue_cteate函數(shù)的返回值均是dispatch_queue_t類型。

為myConcurrentDispatchQueue指定執(zhí)行的block函數(shù)。代碼:

dispatch_async(myConcurrentDispatchQueue,^{NSLog(@"myConcurrentDispatchQueue的block");});

-.dispatch_release

部署版本低于iOS6.0時(shí)需要手動(dòng)調(diào)用。雖然iOS5.0就推出了ARC模式,但是因?yàn)镺S_OBJECT_USE_OBJC是在iOS6才推出的,所以最低部署版本需要iOS6才可以自動(dòng)釋放。

二.Main Dispatch Queue/Global Dispatch Queue

使用系統(tǒng)提供的Dispatch Queue。

-.Main Dispatch Queue

主線程中執(zhí)行的Dispatch Queue。因?yàn)橹骶€程只有一個(gè),所以Main Dispatch Queue自然就是Serial Dispatch Queue。

追加到Main Dispatch Queue 的處理在主線程的RunLoop中執(zhí)行,因此要將用戶界面更新等一些必須在主線程中執(zhí)行的處理追加到Main Dispatch Queue使用,如:網(wǎng)絡(luò)請(qǐng)求中需要刷新界面顯示進(jìn)度,代碼

dispatch_main_async_safe((^{

label.text=[NSString stringWithFormat:@"上傳中%.0f%%",percent*100];

}));

-.Global Dispatch Queue

Global Dispatch Queue 是所有應(yīng)用程序都能使用的Concurrent Dispatch Queue 。沒有必要通過dispatch_queue_create函數(shù)逐個(gè)生存Concurrent Dispatch Queue,只要獲取Global Dispatch Queue使用即可。

優(yōu)先級(jí)介紹

Global Dispatch Queue(High Priority) ? ? ? ? ? ? ? 高

Global Dispatch Queue(Default Priority) ? ? ? ? ? 默認(rèn)

Global Dispatch Queue(Low Priority) ? ? ? ? ? ? ? ?低

Global Dispatch Queue(Background priority) ?后臺(tái)

后臺(tái)優(yōu)先級(jí)因?yàn)镚lobal Dispatch Queue不能保證線程執(zhí)行的實(shí)時(shí)性,因此優(yōu)先級(jí)只是大致判斷。在處理內(nèi)容可有可無時(shí),使用后臺(tái)優(yōu)先級(jí),只能進(jìn)行這種程度的區(qū)分。

獲取方法如下

//Main Dispatch Queue 的獲取方法

dispatch_queue_t mainDispatchQueue = dispatch_get_main_queue();

//Global Dispatch Queue (高) 獲取方法

dispatch_queue_t globalDispatchQueueHigh = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0);

//Global Dispatch Queue (默認(rèn)) 獲取方法

dispatch_queue_t globalDispatchQueueDefault = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

//Global Dispatch Queue (低) 獲取方法

dispatch_queue_t globalDispatchQueueLow = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,0);

//Global Dispatch Queue (后臺(tái)) 獲取方法

dispatch_queue_t globalDispatchQueueBackgroud = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0);

對(duì)于Main Dispatch Queue和Global Dispatch Queue 執(zhí)行dispatch_retch函數(shù)和dispatch_release函數(shù)不會(huì)引起任何變化,也不會(huì)有任何問題。

dispatch_set_target_queue

可以使多串并行的Queue變成串行執(zhí)行

未完待續(xù)...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • GCD筆記 總結(jié)一下多線程部分,最強(qiáng)大的無疑是GCD,那么先從這一塊部分講起. Dispatch Queue的種類...
    jins_1990閱讀 839評(píng)論 0 1
  • 簡(jiǎn)介 GCD(Grand Central Dispatch)是在macOS10.6提出來的,后來在iOS4.0被引...
    sunmumu1222閱讀 957評(píng)論 0 2
  • 我們知道在iOS開發(fā)中,一共有四種多線程技術(shù):pthread,NSThread,GCD,NSOperation: ...
    請(qǐng)叫我周小帥閱讀 1,561評(píng)論 0 1
  • NSThread和NSOperation就不多說,NSOperation就是將GCD封裝成對(duì)象來便于開發(fā)者調(diào)用。蘋...
    Alcander閱讀 621評(píng)論 0 1
  • 詞:董書利 想要一份刻骨的愛情 鏡中卻發(fā)現(xiàn)自己已不在年輕 再次走過那條老街 物是人非也已是另一個(gè)世界 耳邊突然響起...
    星巢文化閱讀 459評(píng)論 5 3

友情鏈接更多精彩內(nèi)容