2013-08-01 37 views
19

在我的應用程序很多地方我用下面的代碼來執行後臺任務,並通知主線程:創建自定義的順序全局調度隊列

dispatch_queue_t backgroundQueue = dispatch_queue_create("dispatch_queue_#1", 0); 
    dispatch_async(backgroundQueue, ^{ 

    dispatch_async(dispatch_get_main_queue(), ^{ 


     }); 
    }); 

是否有可能在一個地方創建一個backgroundQueue(其中做最好的方法?)並在以後使用它? 我知道系統全局隊列,但排序對我很重要。

回答

34

像這樣的東西應該很好地工作:

dispatch_queue_t backgroundQueue() { 
    static dispatch_once_t queueCreationGuard; 
    static dispatch_queue_t queue; 
    dispatch_once(&queueCreationGuard, ^{ 
     queue = dispatch_queue_create("com.something.myapp.backgroundQueue", 0); 
    }); 
    return queue; 
} 
+0

請問您可以添加一個使用它的例子嗎? – pvllnspk

+0

當然:dispatch_async(backgroundQueue(),^ {NSLog(@「登錄後臺隊列!」}); –

+0

無法編譯你的代碼在答案 – pvllnspk

0

你也可以我們的NSOperationQueue,推動進行操作即可。爲了確保操作不會按順序運行,可以將isConcurrent設置爲NO。

+0

這不是我的情況 – pvllnspk

-5
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
       //back ground thread 

       dispatch_async(dispatch_get_main_queue(), ^{ 
        // main thread 
         }); 
       }); 
0
queue = dispatch_queue_create("com.something.myapp.backgroundQueue", 0); 

前面是串行隊列,如果你想創建併發隊列,你可以使用DISPATCH_QUEUE_CONCURRENT。

在iOS 5及更高版本中,您可以通過指定DISPATCH_QUEUE_CONCURRENT作爲隊列類型來創建併發分派隊列。

dispatch_queue_t queue = dispatch_queue_create("downLoadAGroupPhoto", 
                DISPATCH_QUEUE_CONCURRENT);