2011-07-26 12 views
5

chcę mieć jedno połączenie występuje asynchronicznie, odpowiednik:Jak korzystać z Grand Central Dispatch w celu rozpoczęcia jednego asynchronicznego połączenia?

doThisInASecondThreadThenHaveThisThreadDisappear:@selector(myMethod);

Co jest wywołanie Grand Central Dispatch, aby osiągnąć ten cel? Jestem dla niego nowy i gubię się ze wszystkimi skomplikowanymi rzeczami z kolejkami. Rozumiem rzeczy, które mogą być osiągnięte z tym, ale w tym przypadku (proste, że obecnie obchodzi) jestem po prostu stracił

Odpowiedz

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

Albo, jeśli chcesz korzystać z głównego wątku:

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

można również użyć 'dispatch_get_global_queue' aby dostać jeden z globalnych równoczesnych kolejki zamiast tworzyć kolejki. Może to być lepsze, ponieważ nie musisz zarządzać pamięcią. – zneak

+0

@zneak możesz dokładnie opisać, jak będą wyglądać? – Nektarios

+0

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

3

Oto krótki przykład kodu

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

Globalne kolejki nie muszą być zwalniane, ostatnie wywołanie to nop (i tak czy inaczej brakowałoby parowania dispatch_retain w trybie pedantycznym). –

+0

@Grzegorz Adam Hankiewicz, dzięki za informację! – Tudorizer

Powiązane problemy