iOSConcorrenza

introduzione

Argomento correlato: Grand Central Dispatch

Sintassi

  • dispatch_async: esegue un blocco di codice in una coda separata e non interrompe la coda corrente. Se la coda è su un thread diverso da quello su cui è stato chiamato dispatch_async, il codice nel blocco verrà eseguito mentre il codice dopo l'esecuzione di dispatch_async
  • dispatch_sync - Esegue un blocco di codice in una coda separata, e si ferma la coda corrente. Se la coda è su un thread diverso da quello su cui è stato chiamato dispatch_async, verrà eseguito il codice nel blocco e l'esecuzione sul thread in cui è stato chiamato il metodo riprenderà solo dopo il completamento

Parametri

coda La coda in cui verrà eseguito il codice nel blocco di invio. Una coda è simile (ma non esattamente uguale a) a un thread; il codice in code diverse può essere eseguito in parallelo. Usa dispatch_get_main_queue per ottenere la coda per il thread principale Per creare una nuova coda, che a sua volta crea un nuovo thread, usa dispatch_queue_create("QUEUE_NAME", DISPATCH_QUEUE_CONCURRENT) . Il primo parametro è il nome della coda, che viene visualizzato nel debugger se si mette in pausa mentre il blocco è ancora in esecuzione. Il secondo parametro non ha importanza se non si desidera utilizzare la stessa coda per più chiamate dispatch_async o dispatch_sync . Descrive cosa succede quando un altro blocco viene inserito nella stessa coda; DISPATCH_QUEUE_CONCURRENT farà sì che entrambi i blocchi vengano eseguiti allo stesso tempo, mentre DISPATCH_QUEUE_SERIAL farà in modo che il secondo blocco attenda che il primo blocco finisca
bloccare Il codice in questo blocco verrà eseguito nella coda della queue ; inserisci il codice che vuoi eseguire sulla coda separata qui. Un consiglio utile: se stai scrivendo questo in Xcode e l'argomento del blocco ha il contorno blu attorno ad esso, fai doppio clic sull'argomento e Xcode creerà automaticamente un blocco vuoto (questo vale per tutti gli argomenti dei blocchi in qualsiasi funzione o metodo)

Osservazioni

Ogni volta che fai qualcosa su un thread separato, cosa che succede quando usi le code, è importante mantenere la sicurezza dei thread. Alcuni metodi, in particolare quelli per UIView , potrebbero non funzionare e / o bloccarsi su thread diversi dal thread principale. Inoltre, assicurati di non modificare nulla (variabili, proprietà, ecc.) Che viene utilizzato anche sul thread principale, a meno che tu non stia tenendo conto di questo cambiamento

Concorrenza Esempi correlati