Estoy en un proyecto de iPhone usando ARC
. La aplicación es basada en navegación, usando UINavigationController
.¿Al establecer objetos a cero cuando se usa ARC?
El caso de uso típico es pasar de un "principal" UIViewController
a un "secundario" UIViewController
varias veces, tal vez hasta 100 veces. El controlador secundario tiene muchas imágenes PNG locales y estáticas, algunas de ellas repetidas.
Estoy perfilando la aplicación y puedo ver cómo, al pasar del controlador "principal" al "secundario", asigna unos 0.8 MB, pero al presionar el botón Atrás, no libera la memoria. Entonces, cuando voy de nuevo al controlador secundario, se asignan otros 0,8 MB, y así sucesivamente ...
Depuración, noté que el método viewDidUnload:
del UIViewController
secundario nunca se está llamando, pero también leí que es eso método en el que se supone que configuro para anular las referencias guardadas por el controlador. Hacerlo en viewDidDisappear:
no ayuda, porque quiero que ocurra solo cuando se presiona el botón Atrás, es decir, cuando se saca el controlador de la pila (también se llamaría al método viewDidDisappear:
cuando se empuja otro controlador en la pila).
Entonces las preguntas son: ¿es allí donde tengo que hacer eso? ¿Puedo forzar que se llame ese método? ¿Está bien el comportamiento? (Creación de perfiles, las asignaciones aumentaron a 20 MB después de algunos ciclos de "main" -> "secondary" -> "main" -> "secondary" -> ...) ??
Gracias a todos de antemano
ARC básicamente se usa para liberar el objeto automáticamente. Puede crear un nuevo proyecto con la desactivación del ARC para poder liberar los objetos manualmente. –
implementar - (void) didReceiveMemoryWarning. Este es el método que se llama cuando su aplicación usa demasiada memoria. – MJB
¿Cómo está implementando el comportamiento del botón de retroceso? ¿Puedes publicar el código para esto? – Jim