Explicación del ciclo de vida de UIViewController

Feb 19 2023
Una de las preguntas de entrevista más populares.
Es una de las preguntas de entrevista más populares para los puestos de iOS Intern/Junior Developer. Y este tema es realmente importante, porque cada desarrollador de iOS necesita conocer el ciclo de vida del controlador de vista, para que pueda reaccionar fácilmente para ver los cambios y realizar acciones en el lugar correcto.
Foto de Tianyi Ma en Unsplash

Es una de las preguntas de entrevista más populares para los puestos de iOS Intern/Junior Developer. Y este tema es realmente importante, porque cada desarrollador de iOS necesita conocer el ciclo de vida del controlador de vista, para que pueda reaccionar fácilmente para ver los cambios y realizar acciones en el lugar correcto.

Podemos dividir todos los métodos del ciclo de vida en 3 grupos y son responsables de:

  • Creando un controlador de vista
    - init()
  • Administrar la vista
    -
    loadView()
    -
    viewDidLoad()
  • Responder a eventos relacionados con la vista
    -
    viewWillAppear(_:)
    -
    viewDidAppear(_:)
    -
    viewWillDisappear(_:)
    -
    viewDidDisappear(_:)

en eso()

Como cualquier otra clase, UIViewControllertiene init()método. En la etapa de inicio, la vista del controlador no está cargada, por lo que no puede acceder a ella ni a sus propiedades o métodos. Puede crear personalizado init()si desea pasar algunos datos o dependencias al controlador de vista.

cargarVista()

Este método crea la vista que administra el controlador. Puede anular este método para configurar su vista personalizada como la vista de un controlador.

override func loadView() {
  super.loadView()
  self.view = CustomView()
}

verDidLoad()

Este método se llama cuando la vista del controlador se ha cargado en la memoria. Puede realizar alguna configuración adicional en este método. Dado que la vista se carga en esta etapa, puede acceder a la vista del controlador y sus propiedades. Como loadView(), viewDidLoad()se llama solo una vez. En este método, debe configurar sus vistas, agregar acciones para UIControlelementos, proporcionar delegados a tablas, colecciones y otros elementos que necesitan delegados. También puede obtener algunos datos de la API, pero solo si está seguro de que necesita hacerlo una vez. De lo contrario, hazlo en el viewWillAppear(). En otras palabras, puede configurar el estado inicial del controlador de vista y la vista en este método.

override func viewDidLoad() {
  super.viewDidLoad()
  fetchSomeData()
  tableView.delegate = self
  tableView.dataSource = self
  label.text = "Some text"
  submitButton.addTarget(self, action: #selector(someSelector), for: .primaryActionTriggered)
}

verAparecerá(_ : )

Esto se llama justo antes de que el controlador de vista se agregue a la jerarquía de vista y se muestre al usuario. Usualmente uso este método para configurar una barra de navegación y obtener datos, si quiero actualizar algunos datos. En este método, se configuran todos los marcos de vista, por lo que puede realizar algunos cálculos de diseño. ¡Pero no inicie ninguna animación aquí! La vista aún no se muestra.

override func viewWillAppear(_ animated: Bool) {
  super.viewWillAppear(animated)
  title = "Some title"
  navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(named: "someImage"),
                 style: .plain,
                 target: self,
                 action: #selector(someSelector))
}

verApareció(_:)

Se llama después de agregar la vista a la jerarquía de vistas de las ventanas. Este es el lugar correcto para comenzar las animaciones si tiene algunas. También puede comenzar a buscar datos en viewDidAppear(_:)lugar de viewWillAppear(_:).

override func viewDidAppear(_ animated: Bool) {
  super.viewDidAppear(animated)
  startSomeAnimation()
}

Este método se llama cuando la vista está a punto de desaparecer. Se puede llamar cuando presiona o abre un controlador de navegación, antes de la presentación o el cierre del controlador de vista modal. Puede anularlo para guardar el estado de vista actual almacenándolo en algún lugar o enviándolo a la API, para cancelar observadores, oyentes y detener temporizadores.

override func viewWillDisappear(_ animated: Bool) {
  super.viewWillDisappear(animated)
  stopTimer()
  removeObserves()
  saveData()
}

Este método se llama cuando la vista del controlador se eliminó de la jerarquía de vistas. Puede detener sus animaciones aquí o también puede hacer algunas cosas que está haciendo en viewWillDisappear(_:).

override func viewDidDisappear(_ animated: Bool) {
  super.viewDidDisappear(animated)
  activityIndicator.stopAnimating()
  someAnimation().stop()
}

Want to check other articles about iOS development?

Check out my profile.