Antecedentes:iPhone Desarrollo - Simular memoria Advertencia
tengo una aplicación de la barra de pestañas. Cada pestaña contiene un controlador de navegación que permite al usuario hacer la transición de una vista a la otra mostrando una información detallada de los datos (cada vista está siendo manejada por un controlador de vista y cada clase de controlador de vista tiene el método didReceiveMemoryWarning
). Las listas se completan extrayendo los datos de los servicios web.
Problema:
Cuando yo uso "Hardware> Memoria Advertencia Simular" opción de iPhone Simulator, el método se llama didReceiveMemoryWarning
para todos mis controladores de vista - incluso la que el usuario está viendo. No quiero borrar ningún contenido que esté siendo utilizado por el controlador de vista activo. ¿Cómo puedo lograr eso?
¿Qué método debe tener la implementación para volver a cargar los datos después de que se liberaron los datos debido a una advertencia de memoria? (Veo que las clases controlador de vista que contienen una vista de tabla llamada viewDidLoad
método cuando el usuario vuelve a ese punto de vista, pero si la vista contiene (dicen UIWebView) entonces viewDidLoad
método no se llama. ¿Por qué?)
editado (viernes 30 enero 2009 - 15:10)
. (Nota: estoy usando constructor de interfaz para la creación de puntos de vista, y loadView
método está comentada)
Así, cuando un controlador de vista recibe una mensaje de advertencia de memoria, estos son los pasos que se llevan a cabo:
método Después se llama:
- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; }
Como resultado de la llamada a
[super didReceiveMemoryWarning]
,[self setView:nil]
llamada automáticamente?Si se deben borrar los recursos, se debe sobrescribir el método
setView
para borrar los recursos locales.[self setView:nil]
no se llama si la vista está actualmente activa (De forma predeterminada). ¿Derecha? - Estoy realmente curioso qué método toma esta decisión y cómo?
Puede confirmar. Además, recibí un error al seguir este enfoque, pero al agregar myObject = nil
después de liberar myObject
en dealloc
, el método de la clase controladora solucionó el problema. Gracias.
Incluso si yo no reemplazar el método didReceiveMemoryWarning, mi punto de vista se borra. ¿Porqué es eso? – Mustafa
No anula significa que obtiene el comportamiento predeterminado implementado por UIViewController, que es borrar su vista. Si su anulación simplemente llama a la súper implementación, es lo mismo que no tener ninguna anulación en absoluto. –