Saltar al contenido

GCD y NSOperation – Ejecutando tareas en segundo plano en iOS

21/07/2014

A veces necesitamos realizar tareas en nuestras aplicaciones que requieren mucho tiempo, y casi seguro que bloquearán nuestro hilo principal, y por consiguiente congelarán la interfaz de usuario.

Por ejemplo, si necesitamos descargar datos de la red y los datos a descargar tienen un tamaño considerable, debemos realizar esta descarga en segundo plano, o lo que es lo mismo, realizar la descarga en otro hilo distinto al hilo principal.

Una de las cosas que no puedes permitirte como desarrollador, es dejar la interfaz “congelada” porque uno de tus procesos esté ejecutandose en el hilo principal o main thread, por ello debes saber crear colas que ejecutarán estos procesos en segundo plano, así tu aplicación será 100% funcional mientras realiza tediosas tareas de forma transparente para el usuario.

HILO PRINCIPAL O MAIN THREAD

La mayoría de todos los procesos, si no todos, que ejecute tu aplicación, se realizarán en el hilo principal de ejecución o main thread, pero nosotros podemos crear colas que ejecutarán hilos, que a su vez ejecutarán tareas o subprocesos fuera del hilo principal, de forma que tu aplicación mejorará en rendimiento, y evitarás el temido “efecto congelado” que seguramente habrás sufrido alguna vez, sí, esa sensación de querer hacer scroll y no poder hacerlo, o bien pulsar un botón que no te responde.

CREANDO COLAS

En iOS tenemos dos formas de mandar tareas a segundo plano y así evitar colapsar tu hilo principal: GCD (Grand Central Dispath) y las clases NSOperationNSOperationQueue, existen diferencias entre usar una u otra.

GRAND CENTRAL DISPATCH

Es la API que nos provee Apple para crear colas que ejecutarán tareas en segundo plano, se trata de la librería de código abierto libdispatch, aunque Apple trabaja con ella bajo el nombre de Grand Central Dispatch, cosas del marketing 😉

Podemos crear colas en serie, es decir las tareas se ejecutarán una detrás de otra, o bien crear colas concurrentes, en las que las tareas se ejecutarán de forma simultánea.

La principal diferencia con NSOperationQueue, es que GCD usa bloques para gestionar estas subtareas.

NSOPERATION Y NSOPERATIONQUEUE

Es la alternativa a GCD, su uso es muy similar, podemos crear colas en serie o concurrentes, crearemos operaciones a través de instancias  a la clase NSOperation, posteriormente añadiremos estas operaciones a las colas creando objetos de la clase NSOperationQueue.

NSOperationQueue no usa bloques para gestionar los subprocesos, y además permite cancelar las tareas enviando el mensaje cancel, cosa que con GCD no es posible.

¿Quieres aprender a crear Apps para iOS? Te ánimo a que visites nuestras próximas convocatorias de cursos para aprender a crear Apps para iPhone e iPad, disponemos de formación Online y presencial, nuestros cursos están adaptados al sistema operativo actual, e incorporan formación en Objective-C y el nuevo lenguaje de programación Swift.