GCD中的dispatch_get_global_queue(long identifier, unsigned long flags)


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)               低優先級
     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); 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM