¿Cuál es la diferencia entre viewDidLoad
y viewDidAppear
? ¿Qué tipo de inicialización o código personalizado se incluye en esas funciones?
por ejemplo, presentModalViewController
funciona solo cuando está presente viewDidAppear
y no está encendido viewDidLoad
.
Respuestas:
viewDidLoad
se llama exactamente una vez, cuando el controlador de vista se carga por primera vez en la memoria. Aquí es donde desea crear una instancia de las variables de instancia y crear las vistas que vivan durante todo el ciclo de vida de este controlador de vistas. Sin embargo, la vista todavía no es visible en este punto.viewDidAppear
se llama cuando la vista es realmente visible y se puede llamar varias veces durante el ciclo de vida de un controlador de vista (por ejemplo, cuando se descarta un controlador de vista modal y la vista vuelve a ser visible). Aquí es donde desea realizar cualquier acción de diseño o hacer cualquier dibujo en la interfaz de usuario, por ejemplo, presentar un controlador de vista modal. Sin embargo, todo lo que haga aquí debería ser repetible. Es mejor no retener cosas aquí, o de lo contrario obtendrá pérdidas de memoria si no las libera cuando la vista desaparece.Ver: https://developer.apple.com/documentation/uikit/uiviewcontroller
fuente
viewDidLoad
generalmente solo se llama una vez y solo una vez, hay una situación en la que se puede llamar nuevamente. Específicamente, si alguna vez recibe un mensajedidReceiveMemoryWarning
, sus vistas no visibles pueden ser liberadas (aunque los controladores de vista están intactos) y cuando regrese, esviewDidLoad
posible que se le solicite nuevamente.didReceiveMemoryWarning
. Pero estoy de acuerdo en que si emplea buenas prácticas al escribir suviewDidLoad
, debería estar bien. Mi único punto es que el uso descuidado de ivars y la administración manual de la memoria definitivamente pueden resultar en fugasviewDidLoad
. Las personas deben ser sensibles aldidReceiveMemoryWarning
escenario y programar en consecuencia.viewDidLoad
código que se filtrarádidReceiveMemoryWarning
. Suspiro.En pocas palabras, querrá crear controles o matrices en
viewDidLoad
, donde como enviewDidAppear
es donde desearía actualizar esos controles o matrices.viewDidLoad
se llama una vez cuando se crea el controlador yviewDidAppear
se llama cada vez que aparece la vista, bueno, DID. Entonces, digamos que tiene una vista modal que presenta, cuando esa vista se descarta,viewDidAppear
se llamará yviewDidLoad
no se llamará.fuente
viewDidLoad
se puede llamar más de una vez . Si su vista mientras no se muestra (debajo de una pila de otras vistas) es descargada por versiones anteriores de iOS en una situación de poca memoria, entonces el controlador de vista recargará automáticamente la vista cuando sea necesario volver a mostrarla en la pantalla. En versiones posteriores de iOS, puede optar por ayudar a reducir el uso de memoria haciendo lo que iOS hizo anteriormente por usted: descargar las vistas fuera de la pantalla cuandodidReceiveMemoryWarning
llegue el mensaje, en cuyo caso seviewDidLoad
volverá a llamar.