2011-07-26 12 views
5

Quiero tener una llamada ocurren de forma asíncrona, el equivalente a:¿Cómo uso Grand Central Dispatch para iniciar una llamada asincrónica?

doThisInASecondThreadThenHaveThisThreadDisappear:@selector(myMethod);

¿Cuál es la llamada Grand Central Dispatch para lograr esto? Soy nuevo en esto y me pierdo con todas las cosas complejas de hacer cola. Yo entiendo las cosas que se pueden conseguir con eso, pero para este caso sencillo (que en la actualidad me importa) estoy perdido

Respuesta

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

O si es necesario utilizar el hilo principal:

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

también puede usar 'dispatch_get_global_queue' para conseguir una de las colas concurrentes globales en lugar de crear una cola. Esto puede ser preferible ya que no tiene que hacer ninguna gestión de memoria. – zneak

+0

@zneak ¿Puedes explicar exactamente cómo se verían? – Nektarios

+0

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

3

Aquí está un ejemplo de código rápida

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

Las colas globales no tienen que ser liberadas, la última llamada es un nop (y le faltaría un emparejamiento dispatch_retain de todos modos en modo pedante). –

+0

@Grzegorz Adam Hankiewicz, gracias por la información! – Tudorizer

Cuestiones relacionadas