GCD

1.推出的時間 iOS4 目的是用來取代NSThread(iOS2推出)的,是C語言框架,它能夠自動利用更多CPU的核數,并且會自動管理線程的生命周期。

GCD的兩個核心概念:任務、隊列

任務:即為在block中執(zhí)行的代碼。

隊列:用來存放任務的。

注意事項:隊列!=線程。隊列中的存放的任務最后都要由線程來執(zhí)行!。隊列的原則:先進先出,后進后出(FIFO)

2.隊列又分為四種:1.串行隊列2.并發(fā)隊列3.主隊列4.全局隊列

串行隊列:任務一個接一個的執(zhí)行。

并發(fā)隊列:隊列中的任務并發(fā)執(zhí)行。

主隊列:跟主線程相關的隊列,主隊列里面的內容都會在主線程中執(zhí)行(我們一般都是在主線程中刷新UI)

全局隊列:一個特殊的并發(fā)隊列

3.并發(fā)隊列和全局隊列的區(qū)別:

并發(fā)隊列有名稱,可以跟蹤錯誤。全局隊列沒有

在ARC中兩個隊列不需要考慮釋放內存,但是在MRC中并發(fā)隊列是創(chuàng)建出來的,需要release操作,而全局隊列只有一個不需要。

一般開發(fā)過程中我們使用全局隊列

>1.執(zhí)行任務的兩個函數

~“同步”執(zhí)行任務:dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>)

~"異步"執(zhí)行任務:dispatch——async(dispatch_queue_t queue, <#^(void)block#>)

>2."同步"和“異步”的區(qū)別:

~“同步”只能在“當前”線程中執(zhí)行任務,不具備開啟新線程的能力。

~“異步”可以在“新”的線程中執(zhí)行任務,具備開啟新線程的能力。

>3.各個隊列的執(zhí)行效果:

*串行隊列同步執(zhí)行,即在當前線程中順序執(zhí)行

*串行隊列異步執(zhí)行,開辟一條新的線程,在該線程中順序執(zhí)行

*并行隊列同步執(zhí)行,不開辟線程,在當前線程中順序執(zhí)行

*并行隊列異步執(zhí)行,開辟多個新的線程,丙炔線程會重用,無序執(zhí)行

*主隊列異步執(zhí)行,不開辟新的形成,順序執(zhí)行

*主隊列同步執(zhí)行,會造成死鎖(“主線程”和“主隊列”相互等待,卡住主線程)

4.線程間的通訊:經典案例:子線程進行耗時操作(例如下載更新)主線程進行UI刷新

dispatch_async(dispatch_get_global_queue(0, 0), ^{??

// 執(zhí)行耗時的異步操作

dispatch_async(dispatch_get_main_queue(), ^{

// 回到主線程,執(zhí)行UI刷新操作

~1.延時操作:

調用NSObject方法:[self performSelector:@selector(run) withObject:nil afterDelay:2.0]; // 2秒后再調?self的run?法

GCD函數實現(xiàn)延時執(zhí)?:dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t) (2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // 2秒后執(zhí)?這?的代碼... 在哪個線程執(zhí)?,跟隊列類型有關


隊列組的使用:

項目需求:首先:分別異步執(zhí)行兩個耗時操作;其次:等兩次耗時操作都執(zhí)行完畢后,再回到主線程執(zhí)行操作:使用隊列組(dispatch_group_t)快速高效的實現(xiàn)上述需求:

dispatch_group_t group = dispatch_group_create(); // 隊列組

dispatch_queue_t queue = dispatch_get_global_queue(0, 0); // 全局并發(fā)隊列

dispatch_group_async(group, queue, ^{// 異步執(zhí)?操作1?

?// longTime1?

?});?

?dispatch_group_async(group, queue, ^{ // 異步執(zhí)?操作2 ?

// longTime2?

?});?

?dispatch_group_notify(group, dispatch_get_main_queue(), ^{

? // 在主線程刷新數據?

// reload Data?

});

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容