¿Cuándo se llama a UIViewController viewDidUnload?

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ú), recibirá un aviso para cualquier controlador de vista conectado a una vista que no esté visible.

Esto se debe a que los controladores de vista están registrados por defecto para notificaciones de advertencia de memoria, y cualquier vista que no esté siendo utilizada actualmente será descargada por el controlador de vista; el método viewDidUnload está ahí para que pueda limpiar todo lo que desee, para ahorrar memoria (o si ha conservado algunos IBOutlets para ayudar a liberar memoria que de lo contrario se liberaría al descargar la vista).

En general, cualquier IBOutlet que libere en dealloc, también debe ser liberado (y las referencias establecidas en nil) en este método.

Además de emitir manualmente una advertencia de memoria en el simulador, puede emitir uno de forma programática con

 - (void)_simulateLowMemoryWarning { // Send out MemoryWarningNotification [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidReceiveMemoryWarningNotification object:[UIApplication sharedApplication]]; // Manually call applicationDidReceiveMemoryWarning [[[UIApplication sharedApplication] delegate] applicationDidReceiveMemoryWarning:[UIApplication sharedApplication]]; } 

A continuación, puede hacer que esto suceda cada 5 segundos con 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]; } 

-viewDidUnload se -viewDidUnload cada vez que la propiedad de vista del controlador de vista se establece en nil, ya sea manualmente o más comúnmente a través de didReceiveMemoryWarning:

iOS 6.xy posterior

Sé que esta es una pregunta anterior, pero creo que debería enviarse una respuesta con respecto a los cambios en la API viewDidUnload en iOS 6, concretamente en iOS 6, viewDidUnload ya no se llama (en absoluto) y ha quedado en desuso.

viewDidUnload llamado en condiciones de poca memoria. Deberíamos descargar cosas que cargamos en el método viewDidLoad. Tenemos que renunciar a la propiedad del objeto llamando al método de acceso para establecerlo en cero. En el caso de una salida, el objeto se libera por sí mismo para que la referencia del objeto se pueda establecer de manera segura en nil. Si no es una propiedad sintetizada, entonces primero tenemos que liberar el objeto de lo que establecemos en cero.