Quando viene chiamato UIViewController viewDidUnload?

Nota: questa domanda è obsoleta- viewDidUnload è obsoleto iOS 6.

Quando viene richiamato automaticamente viewDidUnload di UIViewController? Sì, lo so, quando la vista si scarica. Ma quando succede automaticamente? Come posso farlo manualmente? Grazie.

Se si emette un avviso di memoria nel simulatore (guarda nel menu), questo verrà richiamato per qualsiasi controller di vista collegato a una vista che non è visibile.

Questo perché i controller di visualizzazione per impostazione predefinita sono registrati per le notifiche di avviso di memoria, e qualsiasi vista che non è attualmente in uso verrà scaricata dal controller di visualizzazione – il metodo viewDidUnload è lì in modo che tu possa ripulire qualsiasi altra cosa desideri, per risparmiare extra memoria (o se hai conservato alcuni IBOutlet per liberare memoria che altrimenti verrebbe rilasciata dalla vista scaricata).

In generale, qualsiasi metodo IBOutlet rilasciato in dealloc deve essere rilasciato (e i riferimenti impostati su zero) in questo metodo.

Oltre a emettere manualmente un avviso di memoria nel simulatore, è ansible emetterne uno in modo programmatico con

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

È quindi ansible fare in modo che ciò avvenga ogni 5 secondi utilizzando un timer

 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 viene chiamato ogni volta che la proprietà viewcontroller’s view è impostata su nil, manualmente o più comunemente attraverso didReceiveMemoryWarning:

iOS 6.xe versioni successive

So che questa è una domanda più vecchia, ma ritengo che debba essere viewDidUnload una risposta riguardo alle modifiche all’API viewDidUnload in iOS 6 e cioè che in iOS 6 viewDidUnload non viene più chiamato (affatto) ed è stato deprecato.

viewDidUnload chiamato in condizioni di memoria insufficiente. Dovremmo scaricare cose che abbiamo caricato nel metodo viewDidLoad. Abbiamo bisogno di abbandonare la proprietà dell’object chiamando il metodo accessor per impostarlo su zero. Nel caso di una presa, l’object si rilascia in modo che il riferimento dell’object possa essere impostato in modo sicuro su zero. Se non è una proprietà sintetizzata, allora abbiamo prima bisogno di rilasciare l’object di quanto non abbiamo impostato a zero.