本篇文章會持續更新:
dispatch_async(dispatch_get_global_queue(0, 0), ^{ // 處理耗時操作的代碼塊 //通知主線程刷新 dispatch_async(dispatch_get_main_queue(), ^{ //回調或者說是通知主線程刷新 }); });
其中main_queue是系統默認的串行隊列,global_queue是系統默認的並行隊列。
創建任意個數的串行隊列,每個隊列依次執行添加的任務,一個隊列同一時刻只能執行一個任務(串行),但是各個隊列之間不影響,可以並發執行。每個隊列中的任務運行在一個由各自串行隊列維護的獨立線程上,一個隊列中只有一個線程。
並行隊列是不允許自己創建的,系統中存在三個不同優先級的並行隊列。並行隊列依舊按照任務添加的順序啟動任務,但是,後一個任務無須等待前一個任務執行完畢,而是啟動第一個任務後,立即啟動下一個任務。至於同一時刻允許同時運行多少個任務有系統決定。任務各自運行在並行隊列為他們提供的獨立線程上,並行隊列中同時運行多少個任務,就必須維護多少個線程。
gcd中還有一個概念叫做主調度隊列
如下:
dispatch_async(dispatch_get_main_queue(), ^{ //跟新界面的操作 });
static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // 這裡寫的代碼只會被執行一次 });
如果你收集有實用的關於gcd的用法,歡迎分享給我,直接在文章下面評論即可
我的微信公眾號:
iOSDevTip