Controllo della concorrenza
La concorrenza è un modo per eseguire più di una cosa contemporaneamente. In un'applicazione, la concorrenza si riferisce a più attività in esecuzione contemporaneamente / contemporaneamente.
La concorrenza può rendere la tua applicazione più veloce, più pulita e offrire una migliore esperienza all'utente. L'uso del multithreading sembra difficile a molti sviluppatori, ma le API sono similiNSOperation e Dispatch Queues semplifica l'utilizzo della concorrenza e del multi-threading nell'applicazione.
Grand Central Dispatch
GCD è l'API più comunemente utilizzata per gestire codice concorrente ed eseguire operazioni in modo asincrono a livello di sistema. GCD fornisce e utilizza code di attività. Queste code sono la struttura dati che utilizza la terminologia FIFO, ovvero l'attività al primo posto in una coda verrà eseguita per prima e l'attività nell'ultima di una coda verrà eseguita alla fine.
Ad esempio: supponiamo una linea per la prenotazione di un biglietto del cinema, se sei l'ultima persona, riceverai il biglietto per ultimo e se qualcuno viene dopo di te, riceverà un biglietto dopo di te.
Coda di spedizione
Le code di invio sono un modo semplice per eseguire un'attività in modo asincrono e simultaneo nell'applicazione. Esistono due tipi di code:
Serial Queues - Memorizzano le attività in serie ed eseguono un'attività alla volta.
Concurrent Queues - Memorizzano le attività in serie ed eseguono un'attività alla volta.
Alcune delle funzioni utilizzate per creare o ottenere code sono:
dispatch_queue_create
// create a serial or concurrent queue
dispatch_queue_get_label
// get the label of a given queue
dispatch_get_main_queue
// get the one and only main queue
dispatch_get_global_queue
// get one of the global concurrent queues
Aggiunta di attività alle code
Esistono due tipi di funzioni, che aiutano ad aggiungere attività alle code. Sono -
Synchronous Functions -
dispatch_once - invierà l'attività solo una volta terminata la durata dell'applicazione.
dispatch_sync - sottoporrà un'attività alla coda e tornerà solo quando l'attività sarà completata.
Asynchronous Functions -
Dispatch_async - invierà un'attività e tornerà.
Dispatch_after - ritorna immediatamente ma ritarda per un tempo determinato.
Dispatch_async - ritorna immediatamente ma l'attività viene inviata più volte.
Codice di esempio
Di seguito è riportato il codice di esempio per l'aggiunta di attività alla coda.
dispatch_async(dispatch_get_main_queue(), update_block);
// add update_block to main queue
dispatch_apply(i, some_queue, work_block)
// add work_block to some_queue i times
dispatch_sync(background_queue, blocking_block)
// add blocking block to background queue and wait for completion
Esempio generale di utilizzo di una coda
Il codice seguente è un esempio di utilizzo di una coda.
dispatch_async(background_queue, ^ {
// Perform code that takes long time, here.
Dispatch_async(dispatch_get_main_queue(), ^ {
//Some other task, generally UI.
});
});
Questo è tutto ciò che faremo con il controllo della concorrenza, poiché sono informazioni sufficienti fino a quando non diventerai uno sviluppatore iOS intermedio.
Continua a praticare i concetti che hai imparato e cerca di modificarli e integrarli in base alle tue esigenze.