2012-05-11 2 views

risposta

27

La parte asincrona di invio asincrono vs sincronizzazione è diversa da concomitante contro seriale. Async significa che la funzione ritorna immediatamente, sync significa che aspetterà finché il blocco non verrà eseguito. Poiché il thread principale/coda è seriale, le cose verranno eseguite in ordine - I credo che questo significa che dal momento che stai chiedendo di inviare async sullo stesso thread da cui stai effettuando la distribuzione, verrà restituito immediatamente, attendi fino alla fine del ciclo di esecuzione corrente e qualsiasi altra cosa nella coda, quindi esegui il blocco.

Questo è più utile all'interno di una coda rispetto al thread principale: è possibile elaborare i dati, consentire all'interfaccia utente di aggiornarsi e continuare l'elaborazione senza attendere che tutto si ridisegna, ecc. Ecco perché spesso viene visualizzata una chiamata dispatch_async al thread principale all'interno di un'altra dispatch_async (coda simultanea) anziché solo una dispatch_sync.

24

Sì. Da Apple developer site:

Il framework dei comandi fornisce una coda di serie predefinita per l'applicazione da utilizzare. Si accede a questa coda tramite dispatch_get_main_queue().

+1

È garantito l'esecuzione sul thread principale solo se è presente un ciclo di esecuzione associato al thread principale. – CouchDeveloper

8

Questo è documentato in più posti, incluso lo docs for dispatch_get_main_queue() itself. Il Concurrency Programming Guide dice:

La coda di invio principale è una coda seriale disponibile globalmente che esegue attività sul thread principale dell'applicazione.

+2

Non proprio corretto: è garantito l'esecuzione sul thread principale solo se è presente un ciclo di esecuzione associato al thread principale. Altrimenti, il blocco inviato tramite 'dispatch_async (dispatch_get_main_queue(), block)' può essere eseguito su qualsiasi thread. – CouchDeveloper

+1

Il thread principale ha sempre un ciclo di esecuzione in un'app Cocoa, @CouchDeveloper. –

+0

@JoshCaswell L'OP non cita Cocoa;) – CouchDeveloper