2011-06-13 57 views
0

我的iOS應用程序上有一個刷新按鈕,它啓動GCD中的異步調度隊列。隊列的名稱是自定義的。用戶可能會遇到這樣的問題,即用戶將按鈕敲出來並導致大量不必要的隊列被創建。我希望檢查是否有一個特定名稱的隊列處於活動狀態,因此我無法啓動另一個隊列或添加到相同名稱的同一隊列中。如何確定當前正在運行的異步GCD調度隊列

這可能嗎?

回答

0

那麼就可以保持一個可變的字典的對象添加

[dict setobject:<your object> forkey:<the queue name>] 

當發送後續請求則在該方法可以檢查以下內容:

object = [dict objectforkey:<queue name>] 

if (object == nil) 
//send the request 

當隊列操作完成從字典中刪除鍵對象對。

[dict removeobjectforkey: < queue name > 
0

不,沒有辦法通過名稱從系統獲取串行隊列。你需要自己擁有串行隊列。

2

我不認爲你應該爲每個請求創建新的隊列。而且由於您在創建新隊列來執行每個塊時似乎並不擔心它們是順序的,因此我建議您使用全局隊列來運行塊。這兩個操作都是同義詞,因爲這些是您生成的調度隊列的最終目標隊列。獲取隊列很簡單,應該替換創建自己隊列的代碼。

dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 

如果你希望它們按順序運行,您應該定義自己的隊列作爲一個實例變量,讓你創建它只有一次,使用同一個每次你需要派遣一個塊的時間。