Objective-C coroutine
-
01-10-2019 - |
Domanda
Objective-C - come potrei essere in grado di creare un obiettivo-c coroutine? Quando ho un IBAction chiamato da un pulsante che blocca l'applicazione fino a quando l'IBAction termina dati retreiving (da un sito web). Come potrei avere questa corsa come un coroutine per l'applicazione principale?
Grazie, Christian Stewart
Soluzione
Un coroutine è una tecnica specifica implementazione. Che cosa si vuole fare è fare il lavoro in background senza bloccare l'interfaccia utente.
Ci sono due tecniche principali per fare questo su iOS e Mac OS X:. Loop Run e fili
Se sono solo scaricando alcuni dati tramite un URL HTTP, è possibile avviare il download e dirgli di notifica quando fatto o quando ha alcuni dati per voi. L'URL di download sarà gestire la propria concorrenza con il ciclo di esecuzione corrente, e l'applicazione sarà in grado di interagire con l'utente.
Se è necessario eseguire la propria elaborazione, è possibile spin-off di un thread in background per farlo utilizzando NSOperationQueue e NSOperatipn, utilizzando GCD (dispatch_ *), o utilizzando direttamente NSThread. Se si esegue questa operazione è necessario comprendere programmazione concorrente, proteggendo stato condiviso utilizzando mutexes (serrature) e altri meccanismi di sincronizzazione, e così via.
Per un URL di download, utilizzare proprio supporto concorrenza di NSURLDownload. Per ulteriori lavoro di elaborazione pesante, dare NSOperation una prova.
Altri suggerimenti
Date un'occhiata a URL Caricamento sistema di programmazione Guida .
Si sono probabilmente interessati nel NSURLConnection , si imposta l'URL e fornire ai delegati. I suoi delegati vengono chiamati con i dati e quando la connessione / download è terminato.