15

El ciclo de vida de una aplicación en iOS

52161Puntos

hace 2 años

Se le conoce como ciclo de vida de una aplicación a la secuencia de eventos que se producen entre la ejecución y la terminación de la aplicación. Es muy importante entender el ciclo de vida de una aplicación para cualquier persona que desarrolle en iOS que quiera ofrecer una experiencia de usuario sin problemas. Así que veámoslo a detalle.

Qué sucede desde que se inicia un dispositivo hasta que se ejecuta una aplicación

Cuando el usuario enciende el teléfono, no se ejecuta ninguna aplicación adicional a las que pertenecen al sistema operativo. En el momento que el usuario toca el icono de alguna aplicación, SpringBoard ejecuta dicha aplicación.

Mientras que SpringBoard muestra la launch screen de tu aplicación, la aplicación y las librerías necesarias para ejecutarla se cargan en la memoria. Una vez hecho esto, la aplicación inicia su ejecución y app delegate comienza a recibir las notificaciones.

SpringBoard es la aplicación estándar que gestiona la pantalla de inicio del iPhone. Algunas de sus tareas incluyen el inicio de WindowServer, el lanzamiento y arranque de aplicaciones y la configuración de algunos de los ajustes del dispositivo en el arranque.

UIApplicationDelegate es la entrada principal de las aplicaciones. Este es un protocolo que se debe implementar en la aplicación para recibir notificaciones sobre los eventos del usuario, como el inicio de la aplicación, que pase a segundo plano, la apertura de una notificación e incluso la finalización de la aplicación.

Por último, la clase UIResponder hace que AppDelegate pueda responder a los eventos del usuario y la UIApplicationDelegate permite que AppDelegate sea un objeto que se encargue de gestionar y responder al ciclo de vida de la aplicación.

UIApplication

Swift tiene una función llamada UIApplicationMain que configura varios objetos clave e inicia la ejecución de la aplicación. En el core de cualquier aplicación de iOS se tiene un objeto llamado UIApplication, el cual tiene como trabajo facilitar TODAS las interacciones entre el sistema y el resto de los objetos de la aplicación.

3.png

El UIApplication se encarga de gestionar el bucle de eventos y también otros comportamientos de alto nivel de la aplicación. Además, informa de las transiciones y de algunos eventos especiales (como las notificaciones push entrantes) al delegate de la aplicación.

Por otro lado, el AppDelegate es el corazón del código personalizado, ya que este objeto trabaja de la mano con el UIApplication para manejar:

  1. La inicialización de la aplicación.
  2. Las transiciones de estado.
  3. Los eventos de alto nivel de la aplicación.

<aside>
📌 El objeto AppDelegate es el único que se garantiza que está presente en todas las aplicaciones, por lo que a menudo se utiliza para configurar las estructuras de datos iniciales de la aplicación.

</aside>

El bucle de ejecución principal

El bucle de ejecución principal (main run loop) de una aplicación procesa todos los eventos relacionados con el usuario. El objeto UIApplication configura el bucle de ejecución principal en el momento del lanzamiento y lo emplea para procesar los eventos y manejar las actualizaciones de las interfaces.

Como su nombre lo indica, este bucle se ejecuta en el hilo principal de la aplicación, lo que asegura que los eventos relacionados con el usuario se procesen en el orden que se van recibiendo.

2.png

Todos estos eventos se ponen en cola internamente por la aplicación y se van enviando uno a uno al bucle. El UIApplication es el primer objeto que recibe el evento y toma la decisión sobre lo que hay que hacer. Por ejemplo: un evento de toque es usualmente despachado al objeto de la ventana principal, que, a su vez, lo despacha a la vista en la que ocurrió el toque.

Los 5 estados de ejecución de una aplicación

LifeCycle.png

En cualquier momento de una aplicación se tienen cinco estados que son:

  1. No ejecución: en este punto la aplicación no ha sido lanzada o fue terminada por el sistema operativo.
  2. Inactivo: la aplicación en este estado deja de recibir eventos propios para priorizar otros del sistema, como una llamada telefónica o un SMS.
  3. Activo: este es el estado más común de una aplicación que se está ejecutando en primer plano y recibe eventos.
  4. En segundo plano: cuando se va al home o se abre otra aplicación, si hay código ejecutable este será ejecutado. Si no hay, o la ejecución terminó, la aplicación será suspendida inmediatamente.
  5. Suspendido: si no hay nada pendiente de ejecutar o el sistema no tiene suficiente memoria para mantener la aplicación, esta será suspendida.

Métodos del ciclo de vida

Así como hay cinco estados del ciclo de vida de una aplicación, también hay cinco métodos para manejar cada uno de estos estados.

  1. viewDidLoad es llamado después de cargar la vista del controlador de memoria.

    funcviewDidLoad()

    Este método se llama después de que el controlador de la vista se haya cargado y solo funciona una vez. Esto quiere decir que no se llama continuamente.

  2. viewWillAppear notifica al controlador de la que la vista está a punto de ser añadida a una jerarquía de vistas.

    funcviewWillAppear(_ animated: Bool)

    Este método es llamado cada vez que aparece la vista. A diferencia de viewDidLoad, es llamado una y otra vez. Por esta razón, las transacciones únicas y de alto costo no deberían hacerse aquí.

  3. viewDidAppear notifica al controlador que su vista fue agregada a una jerarquía de vistas.

    funcviewDidAppear(_ animated: Bool)

    En esta etapa la vista se carga y es visible para el usuario. En este método se pueden realizar operaciones costosas como la obtención de datos a través de la API, el almacenamiento de datos (coreData, userDefaults, etcétera) y la activación de los servicios de localización.

  4. viewWillDisappear notifica al controlador que su vista está a punto de ser eliminada de una jerarquía de vistas.

    funcviewWillDisappear(_ animated: Bool)

    La llamada a este método ocurre cada vez que la vista desaparece. Por la misma razón que con viewWillApper, las transacciones únicas y de alto coste no deberían suceder aquí.

    Se debe tener en cuenta que tanto viewWillAppear y viewWillDisappear no son llamados nuevamente cuando la aplicación se ejecuta en segundo plano.

  5. viewDidDisappear notifica al controlador de la vista que su vista fue eliminada de una jerarquía de vistas.

    funcviewDidDisappear(_ animated: Bool)

    Es posible anular este método para efectuar tareas adicionales asociadas a la eliminación u ocultación de la vista.

Pon a prueba tus habilidades como iOS developer

Ahora que ya sabes cómo funciona el ciclo de vida de una aplicación en iOS, tienes todas las herramientas para darle a tu usuario la mejor experiencia posible al utilizar las aplicaciones que tú desarrolles.

Si quieres conocer más sobre este lenguaje de programación llamado Swift, te invito a leer sobre 8 cosas que no sabías sobre Swift y si quieres aprender más sobre este lenguaje no dudes en pasarte por el Curso de Programación en Swift que te ayudará a dominar los conceptos necesarios para crear tus propias aplicaciones.

Recuerda: nunca pares de aprender. 💚

Alex
Alex
alexcamachogz

52161Puntos

hace 2 años

Todas sus entradas
Escribe tu comentario
+ 2
2
22865Puntos

Me encantó este post Alex. Siempre me llamó la atención como funciona un OS móvil. Era algo que al buscarlo conseguía información muy abstracta y que me costaba comprender. Sin embargo este post tributa a mi entendimiento de estos sistemas.
.
Además me causa curiosidad como se integra lo expuesto conceptualmente a nivel de hardware.