GCD的好處:
1.GCD是基于C語言的封裝3,充分利用了CPU的多核心,節省內存
2.自動管理線程的生命周期(創建線程、調度任務、銷毀線程),不需要程序員手動管理
3.程序員只需要告訴GCD需要執行什么任務,不用再編寫任何線程管理的代碼
任務:放到線程中,需要執行的那段代碼
1.同步:不具備開啟線程的能力,只能在當前線程執行任務
2.異步:具備開啟線程的能力,可以開啟其它線程執行任務
隊列:執行任務時遵行先進先出的原則
1.并行:可以開啟多個線程,執行多個并發任務,但是只能在異步函數中有效
2.串行:讓任務一個接著一個的執行
GCD線程之間的通訊
通常情況下,我們是在主線程里進行UI刷新、點擊、拖拽、滾動等操作,然后把以一些耗時操作放到其它線程,當其它線程完成了操作,就回到了主線程,那么就用到了線程之間的通訊。
#pragma mark - 將多個耗時操作加到異步隊列中,刷新UI
dispatch_group_async :
將代碼塊dispatch_block_t block放入隊列dispatch_queue_t queue中執行;并和調度組dispatch_group_t group相互關聯;如果提交到dispatch_queue_t queue中的block全都執行完畢會調用dispatch_group_notify并且dispatch_group_wait會停止等待;
dispatch_group_enter(group)、dispatch_group_leave(group)
dispatch_group_enter(group):相當于引用計數的+1;
dispatch_group_leave(group) :相當于引用計數的-1;這兩個是成對存在的。
dispatch_group_notify:
當group中所有的block操作都完成后才會執行,不會阻塞當前調用線程,如果需要阻塞當前調用線程,可使用dispatch_group_wait(group, DISPATCH_TIME_FOREVER);