2011-07-26 103 views
5

我想有一個呼叫發生異步,相當於:如何使用大中央調度揭開序幕一個異步調用?

doThisInASecondThreadThenHaveThisThreadDisappear:@selector(myMethod);

什麼是大中央調度呼叫做到這一點?我是新來的,而且我得到了所有與排隊的複雜的東西丟失。我的理解是可以與實現的事情,但對於這個簡單的情況下(即我目前關心),我只是失去了

回答

5
dispatch_queue_t queue = dispatch_queue_create("queueName", NULL); 
dispatch_async(queue, ^(void) { 
    // code to execute here 
}); 
dispatch_release(queue); 

或者,如果你需要使用主線程:

dispatch_async(dispatch_get_main_queue(), ^(void) { 
     // code to execute here 
}); 
+3

您也可以使用'dispatch_get_global_queue'得到全局併發隊列,而不是創建一個隊列之一。這可能是可取的,因爲你不必做任何內存管理。 – zneak

+0

@zneak你能闡述一下它們究竟什麼樣子? – Nektarios

+0

'dispatch_queue_t隊列= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_NORMAL,0);' – zneak

3

下面是一個簡單的代碼示例

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);  
dispatch_async(queue, ^{ 
    // Stuff to do on another thread 
    // Mostly heavy calculations 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     // Stuff to do on main thread 
     // Mostly UI stuff 
    });      
});  
+6

全球隊列沒有被釋放,最後一次通話是NOP(你會錯過在迂腐模式反正dispatch_retain配對)。 –

+0

@Grzegorz亞當Hankiewicz,感謝您的信息! – Tudorizer