2012-05-11 12 views

Respuesta

27

La parte asincrónica del envío async vs sync es diferente a la concurrente vs serie. Async significa que la función vuelve inmediatamente, sync significa que esperará hasta que se ejecute el bloque. Dado que el hilo/cola principal es serial, las cosas se ejecutarán en orden - I crea esto significa que, dado que estás pidiendo que asincréis el envío en el mismo hilo desde el que envías, volverá inmediatamente, espere hasta el final del bucle de ejecución actual y cualquier otra cosa en la cola, y luego ejecute su bloqueo.

Esto es más útil dentro de una cola que en el hilo principal: puede procesar sus datos, dejar que la UI sepa que debe actualizarse, y continuar procesando sin tener que volver a dibujar todo, etc. Es por eso que a menudo ven una llamada dispatch_async al hilo principal dentro de otro dispatch_async (cola simultánea) en lugar de solo un dispatch_sync.

24

Sí. De Apple developer site:

El marco de despacho proporciona una cola de serie predeterminada para la aplicación de usar. Se puede acceder a esta cola a través del dispatch_get_main_queue().

+1

Se garantiza que se ejecuta en el hilo principal solo si hay un ciclo de ejecución asociado al hilo principal. – CouchDeveloper

8

Esto está documentado en varios lugares, incluido el docs for dispatch_get_main_queue() itself. El Concurrency Programming Guide dice:

La cola de envío principal es una cola en serie disponible a nivel mundial que ejecuta tareas en el hilo principal de la aplicación.

+2

No es del todo correcto: se garantiza que se ejecuta en el hilo principal solo si hay un ciclo de ejecución asociado al hilo principal. De lo contrario, el bloque enviado a través de 'dispatch_async (dispatch_get_main_queue(), block)' puede ejecutarse en cualquier subproceso. – CouchDeveloper

+1

El hilo principal siempre tiene un ciclo de ejecución en una aplicación Cocoa, @CouchDeveloper. –

+0

@JoshCaswell El OP no menciona a Cocoa;) – CouchDeveloper

Cuestiones relacionadas