2014-05-05 40 views
3

我想了解將被用於運行時調度上的自定義序列隊列聲明爲調度塊什麼優先權:GCD DISPATCH_QUEUE_SERIAL是它會優先考慮什麼上運行?

dispatch_queue_t隊列= dispatch_queue_create(「com.purposeOfQueue.queue」, DISPATCH_QUEUE_SERIAL);

所以,在這裏,我只是說「隊列」是一個串行隊列。但是,該系統將使用該隊列的優先級。我知道有高,默認,低,背景。

我也知道我可以做到這一點:

dispatch_set_target_queue(隊列,DISPATCH_QUEUE_PRIORITY_DEFAULT);

這會使得隊列獲得DEFAULT優先級。

但如果我只是做我上面顯示?

dispatch_queue_t隊列= dispatch_queue_create( 「com.purposeOfQueue.queue」, DISPATCH_QUEUE_SERIAL);

什麼重點是,要使用?

回答

11

它是有用的注意,從的iOS 8創建隊列和他們的能力已經改變。您將使用以下內容來獲取優先級最低的串行隊列。

dispatch_queue_attr_t queueAttributes = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_BACKGROUND, 0); 
self.queue = dispatch_queue_create("com.abc.myQueue", queueAttributes); 
+0

我將此標記爲正確答案,因爲「服務質量」是現在處理此問題的正確方法。通過指定服務質量,我本質上知道隊列將具有什麼優先級。 – zumzum

-1

檢查串行隊列的蘋果documentation

當您希望您的任務按特定順序執行時,串行隊列非常有用。串行隊列一次只執行一個任務,並且始終從隊列頭部抽取任務。您可以使用串行隊列而不是鎖來保護共享資源或可變數據結構。與鎖不同,串行隊列確保任務按可預測的順序執行。只要您將任務異步提交到串行隊列,隊列就永遠不會死鎖。

和queue.h:

/*! 
* @const DISPATCH_QUEUE_SERIAL 
* @discussion A dispatch queue that invokes blocks serially in FIFO order. 
*/ 
#define DISPATCH_QUEUE_SERIAL NULL 
+1

感謝您的回答,但是,我沒有看到任何關於「優先級」的內容。我的「隊列」上的調度塊有哪些優先級? – zumzum

+0

你可以假設它不是主要的優先級,因爲它不是主線程 – seo

+1

上沒有優先級稱爲「主」。 – damian

4

如果你沒有明確強制優先,它將使用 「默認」 的優先級。這一點恰到達「默認」這個詞的意思的核心。

+0

它是有道理的。這是在文檔中的任何地方找到的,或者它是你想出來的東西嗎?謝謝 – zumzum

+0

我不知道這是否在文檔中的任何地方明確說明。作爲一名英語母語的演講者,我覺得這種說法「不言而喻」。 – ipmcc

2

我相信你能做到,你在找什麼用:

dispatch_set_target_queue(queue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)); 

DISPATCH_QUEUE_PRIORITY_LOW視具體情況而定。

+0

感謝您的評論。我知道這個。但是,我的問題是在沒有明確指定優先級的情況下創建隊列的優先級。 – zumzum

+0

在這種情況下,我會去解決'DISPATCH_QUEUE_PRIORITY_DEFAULT'的各種答案:) –