objective-c ios cocoa-touch memory-management uiviewcontroller

objective c - ¿Se llaman siempre a viewDidUnload y dealloc cuando se destruye un UIViewController?



objective-c ios (2)

Es bastante reflexivo que, el método viewDidiUnload solo se llame cuando aparece la advertencia de memoria. Una buena práctica sería liberar el objeto requerido dentro de este método y también hacer que el objeto sea nulo.

Me gustaría saber si se viewDidUnload dealloc viewDidUnload y dealloc en el proceso de eliminación de UIViewController. ¿Es posible que se dealloc en mi controlador de vista sin que se haya llamado primero a viewDidUnload ?

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 lo sabía con certeza o podría arrojar algo de luz sobre el derribo. proceso.

Actualización de 2012: Es útil tener en cuenta que, como si iOS 6 viewDidUnload ha quedado obsoleto y debe ser reemplazado con desmontaje de vista manual si es necesario en didReceiveMemoryWarning .

Un buen artículo sobre el nuevo UIView / UIViewContoller y el nuevo comportamiento y sus efectos en el blog de joe conway


viewDidUnload no se llamará cada vez como método dealloc . viewDidUnload se viewDidUnload solo cuando su aplicación recibe una advertencia de memoria baja!

Solo piense, si está liberando su objeto tanto en los métodos viewDidUnload como dealloc . Si ambos reciben llamadas cada vez, entonces estás liberando un objeto ya liberado, lo que provocará un bloqueo de la aplicación, ¿no? viewDidUnload es un lugar proporcionado por Apple para limpiar las cosas cuando recibes la advertencia de poca memoria porque sabes que en iPhone tenemos restricciones de memoria.