pantalla - iPhone: ¿cuándo se llama a dealloc para un controlador de visualización?
itunes (4)
Estoy usando UINavigationController para moverme entre 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.
Por ejemplo, esta es la secuencia en la que se visualizan las vistas MainViewController -> viewcontroller1 -> viewcontroller2 -> viewcontroller3
Ahora en viewcontroller3 si hago un popToViewController: mainController, se llama a dealloc solo para viewcontroller3. No se llama para viewcontroller1 y 2.
¿Puede alguien decirme por qué sucede esto?
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.
Es un caso de último encendido, primero apagado. Entonces, si imagina que su primer controlador de visualización es el bollo inferior de una hamburguesa, agregue la hamburguesa (segundo controlador de vista) y luego la hamburguesa superior (tercer controlador de vista).
Si vuelves a la hamburguesa, sacas el bollo superior (popViewController: llama al método dealloc de la vista que aparece). Si desea volver al bollo inferior, debe hacer estallar la hamburguesa (se llama a dealloc cada vez que se abre la vista).
No estoy seguro de por qué en el pop para rootear la segunda vista del controlador no se llamaría sin embargo ..
hmm
donde navegue por sus controladores debería haber necesidad de escribir esta línea después de pushviewcontroller, [viewControllername release]; entonces sería llamar a cada viewcontroller método Dealloc :)
También debe tener en cuenta que dealloc no siempre se garantiza que se ejecute.
use como [self.navigationController popToRootViewControllerAnimated: YES]; Funcionó para mí ... llama a todos los dealloc methos de mis 10 controladores de vista