Middle
Cuéntame sobre el ciclo de vida del controlador Vue.
sobes.tech AI
Respuesta de la IA
El ciclo de vida de un controlador de vista (UIViewController) en iOS representa una secuencia de eventos que ocurren desde su creación hasta su destrucción. Las etapas principales:
- Inicialización:
init?(coder aDecoder: NSCoder): Inicialización desde Storyboard/Nib.init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?): Inicialización desde un archivo Nib o programáticamente sin Nib.loadView(): Carga o crea la vista raíz del controlador. Si se usa Storyboard/Nib, se llama automáticamente. Para creación programática, debe ser sobrescrito.
- Carga de la vista:
viewDidLoad(): Se llama después de que la vista del controlador se carga en memoria. Es adecuado para configuraciones de inicialización que no requieren acceso a geometrías.
- Aparición de la vista:
viewWillAppear(_ animated: Bool): Se llama justo antes de que la vista del controlador se vuelva visible. Adecuado para actualizar datos que puedan cambiar entre apariciones.viewDidAppear(_ animated: Bool): Se llama después de que la vista del controlador se vuelve visible. Adecuado para iniciar animaciones u otras tareas que solo deben ejecutarse después de la visualización completa.
- Desaparición de la vista:
viewWillDisappear(_ animated: Bool): Se llama justo antes de que la vista del controlador deje de ser visible. Adecuado para guardar estado o detener actividades.viewDidDisappear(_ animated: Bool): Se llama después de que la vista del controlador deja de ser visible. Adecuado para liberar recursos o detener procesos que no son necesarios en segundo plano.
- Cambios en el diseño (Layout):
viewWillLayoutSubviews(): Se llama antes de que las vistas del controlador cambien de tamaño.viewDidLayoutSubviews(): Se llama después de que las vistas del controlador han cambiado de tamaño. Adecuado para ajustar tamaños y posiciones finales.
- Cambios en la colección de rasgos (Trait CollectionDidChange):
traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?): Se llama cuando cambian las características del entorno, como tamaño de clase, densidad de pantalla, modo claro/oscuro, etc.
- Liberación de memoria (Desinicialización):
deinit: Se llama justo antes de liberar el objeto del controlador de memoria. Se usa para limpiar recursos, cancelar notificaciones, etc.
Puntos importantes:
- Los métodos
loadView,viewDidLoad,viewDidAppear,viewWillDisappear,viewDidDisappear,deinitse llaman una sola vez en el ciclo de vida del objeto del controlador. - Los métodos
viewWillAppearyviewDidAppearpueden llamarse varias veces, por ejemplo, al navegar hacia adelante y hacia atrás.
Ejemplo de secuencia de llamadas al crear y mostrar un controlador:
// Inicialización (si es desde Storyboard/Nib)
init?(coder aDecoder: NSCoder)
// O inicialización (si es programática)
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)
// Carga de la vista
loadView()
viewDidLoad()
// Aparición de la vista
viewWillAppear(true)
// ... la vista se ha vuelto visible ...
viewDidAppear(true)
// Desaparición de la vista (por ejemplo, al navegar a otro VC)
viewWillDisappear(true)
// ... la vista ya no es visible ...
viewDidDisappear(true)
// Liberación de memoria (cuando ya no hay referencias fuertes al controlador)
deinit