Estoy usando UINavigationController para moverme entre las vistas. Cuando avanzo y retrocedo en las vistas, la memoria utilizada por mi aplicación sigue aumentando. Al colocar declaraciones NSLog en el método dealloc de todos los controladores de vista, noté que solo se llamaba a algunos controladores de visualización y no a todos los que se mostraban.iPhone - ¿cuándo se llama a un control de vista?
Por ejemplo, esta es la secuencia en la que son empujados vistas MainViewController -> viewcontroller1 -> viewcontroller2 -> viewcontroller3
Ahora en viewcontroller3 si hago un popToViewController: mainController, dealloc sólo se llama para viewcontroller3. No se llama para viewcontroller1 y 2.
¿Puede alguien decirme por qué sucede esto?
Ha encontrado el problema. El método dealloc no se llamaba si alguna de las referencias mantenidas por un controlador de vista todavía estaban en la memoria. En mi caso, fue el objeto MPMoviePlayerController el que no se lanzó en viewcontroller1 y viewcontroller2.
Me encontré exactamente con el mismo problema; se llama a dealloc solo para el 3er controlador. Usted dijo "El método dealloc no se llamaba si alguna de las referencias mantenidas por un controlador de vista todavía estaban en la memoria". ¿Puedes dar más detalles sobre esto? –
El viewcontroller era un delegado de un objeto que aún se está utilizando. Lo eliminé de ser el delegado y luego funcionó bien. No estaba desasignado ya que el otro objeto tenía su referencia (como delegado) – lostInTransit