Me gustaría saber si viewDidUnload
y dealloc
son siempre llamados sucesivamente en el proceso de eliminación de UIViewController. ¿Es posible que se haya llamado al dealloc
en mi controlador de vista sin haber llamado primero al viewDidUnload
?¿Se invoca siempre a viewDidUnload y dealloc cuando se destruye un UIViewController?
En cualquier caso, si estoy liberando de forma segura las propiedades y las referencias retenidas en ambos métodos, no sería un problema si se llamaran ambos métodos, pero me preguntaba si alguien estaba seguro o podría arrojar algo de luz sobre el proceso de derribo.
2012 Actualización: Es muy útil tener en cuenta que, como si de iOS 6 viewDidUnload
ha quedado obsoleto y debe ser reemplazado con vistas al desmontaje manual de , si es necesario en didReceiveMemoryWarning
.
Un buen artículo sobre la nueva UIView/UIViewContoller y el nuevo comportamiento y sus efectos en la joe conway blog
Creo que te refieres a 'viewDidUnload' cuando dices' viewDidLoad' en tu respuesta. 'viewDidLoad' no se llama cuando hay poca memoria, pero cuando la vista aparecerá en pantalla (antes de' viewWillAppear'). 'viewDidUnload' se invoca cuando hay una advertencia de poca memoria. –
Esta debería haber sido la respuesta correcta. Esto me metió en problemas hoy. – asandroq
Parece que estaría bien hacer self.whatever = nil dentro de viewDidUnload y luego llamar a [_whatever release] dentro de dealloc. De esta forma, si viewDidUnload se llama primero, entonces dealloc no liberará el elemento porque se eliminará y el mensaje de lanzamiento simplemente desaparecerá cuando se envíe a cero. ¿Alguien puede confirmar esto? – jpswain