GCD默認已經提供了全局的並發隊列供整個應用使用,所以可以不用手動創建。
創建全局隊列的函數為
dispatch_queue_t q = dispatch_get_global_queue(long identifier, unsigned long flags)
參數類型為:
long identifier:ios 8.0 告訴隊列執行任務的“服務質量 quality of service”,系統提供的參數有:
QOS_CLASS_USER_INTERACTIVE 0x21,
用戶交互(希望盡快完成,用戶對結果很期望,不要放太耗時操作)
QOS_CLASS_USER_INITIATED 0x19, 用戶期望(不要放太耗時操作)
QOS_CLASS_DEFAULT 0x15, 默認(不是給程序員使用的,用來重置對列使用的)
QOS_CLASS_UTILITY 0x11, 實用工具(耗時操作,可以使用這個選項)
QOS_CLASS_BACKGROUND 0x09, 后台
QOS_CLASS_UNSPECIFIED 0x00, 未指定
iOS 7.0 之前 優先級
DISPATCH_QUEUE_PRIORITY_HIGH 2 高優先級
DISPATCH_QUEUE_PRIORITY_DEFAULT 0 默認優先級
DISPATCH_QUEUE_PRIORITY_LOW (-2) 低優先級
QOS_CLASS_DEFAULT 0x15, 默認(不是給程序員使用的,用來重置對列使用的)
QOS_CLASS_UTILITY 0x11, 實用工具(耗時操作,可以使用這個選項)
QOS_CLASS_BACKGROUND 0x09, 后台
QOS_CLASS_UNSPECIFIED 0x00, 未指定
iOS 7.0 之前 優先級
DISPATCH_QUEUE_PRIORITY_HIGH 2 高優先級
DISPATCH_QUEUE_PRIORITY_DEFAULT 0 默認優先級
DISPATCH_QUEUE_PRIORITY_LOW (-2) 低優先級
DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN 后台優先級
BACKGROUND表示用戶不需要知道任務什么時候完成,如果選擇這個選項速度慢得令人發指,非常不利於調試!對於優先級推薦不要搞得太負責,就用最簡單,以免發生優先級反轉。
unsigned long flags:蘋果官方文檔是這樣解釋的: Flags that are reserved for future use。標記是為了未來使用保留的!所以這個參數應該永遠指定為0
如果做ios8.0與ios7.0的適配,可以這樣創建全局隊列:
dispatch_queue_t q = dispatch_get_global_queue(0, 0);
試着用全局隊列來做一下異步操作,看看是否為並發執行,如下代碼
dispatch_queue_t q = dispatch_get_global_queue(0, 0);