iphone - life - viewcontroller swift
¿Cuándo se llama UIViewController viewDidUnload? (5)
Además de emitir manualmente una advertencia de memoria en el simulador, puede emitir uno programáticamente con
- (void)_simulateLowMemoryWarning {
// Send out MemoryWarningNotification
[[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidReceiveMemoryWarningNotification
object:[UIApplication sharedApplication]];
// Manually call applicationDidReceiveMemoryWarning
[[[UIApplication sharedApplication] delegate] applicationDidReceiveMemoryWarning:[UIApplication sharedApplication]];
}
Luego puedes hacer que esto suceda cada 5 segundos usando un temporizador
static NSTimer *gLowMemoryTimer = nil;
- (void)stopLowMemoryTimer {
[gLowMemoryTimer invalidate];
gLowMemoryTimer = nil;
}
- (void)startLowMemoryTimer {
if (gLowMemoryTimer) {
[self _stopLowMemoryTimer];
}
gLowMemoryTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(_simulateLowMemoryWarning) userInfo:nil repeats:YES];
}
Nota: esta pregunta no está actualizada: viewDidUnload
está en desuso iOS 6.
¿Cuándo se llama automáticamente a viewDidUnload de UIViewController? Sí, lo sé, cuando la vista se descarga. ¿Pero cuándo sucede eso automáticamente? ¿Cómo puedo hacerlo manualmente? Gracias.
Si emite una advertencia de memoria en el simulador (busque en el menú), se llamará a este controlador de vista asociado a una vista que no esté visible.
Esto se debe a que los controladores de vista están registrados de manera predeterminada para las notificaciones de advertencia de memoria, y cualquier vista que no se esté utilizando actualmente será descargada por el controlador de vista: el método viewDidUnload está ahí para que pueda limpiar cualquier otra cosa que desee, para ahorrar más. memoria (o si ha conservado algunos IBOutlets para ayudar a liberar memoria que de lo contrario sería liberada por la vista que se está descargando).
En general, cualquier IBOutlets que libere en dealloc, también debe ser liberado (y las referencias deben establecerse en cero) en este método.
viewDidUnload se llama en condiciones de poca memoria. Debemos descargar cosas que cargamos en el método viewDidLoad. Necesitamos renunciar a la propiedad del objeto llamando al método de acceso para establecerlo en nulo. En el caso de una salida, el objeto se libera para que la referencia del objeto se pueda establecer de forma segura en cero. Si no es una propiedad sintetizada, primero debemos liberar el objeto que establecer en nil.
-viewDidUnload
se llama siempre que la propiedad view del controlador de vista se establece en nil, ya sea de forma manual o más comúnmente a través de didReceiveMemoryWarning:
iOS 6.xy posterior
Sé que esta es una pregunta anterior, pero creo que se debe enviar una respuesta con respecto a los cambios en la API viewDidUnload
en iOS 6, es decir, que en iOS 6 viewDidUnload
ya no se llama (en absoluto) y ha quedado en desuso.