2012-05-14 13 views
6

Non capisco quando dovrei implementare qualcosa in viewDidUnload versus viewDidDisappear. Qual è la differenza tra i due?viewDidUnload versus viewDidDisappear

Ad esempio, desidero inviare un NSNotificaton quando il controller di visualizzazione viene rimosso dalla gerarchia di visualizzazione. Tra questi due metodi, importa da dove registro la notifica?

http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIViewController_Class/Reference/Reference.html

+0

Perché è stato votato? La domanda era troppo vaga? – kevlar

+0

la documentazione non è sufficientemente approfondita da spiegare la differenza tra questi due metodi? –

risposta

5

Questo è in relazione alla documentazione di Apple: -

viewDidUnload: -

Quando si verifica una condizione di basso livello di memoria e vista l'attuale del controller della vista non sono necessari, il sistema può scegliere di rimuovere quelle viste da memoria. Questo metodo viene chiamato dopo che la vista del controller della vista è stata rilasciata ed è la tua possibilità di eseguire qualsiasi pulizia finale. Se il controller della vista memorizza riferimenti separati alla vista o alle sue sottoview, è necessario utilizzare questo metodo per rilasciare tali riferimenti. È inoltre possibile utilizzare questo metodo per rimuovere i riferimenti a tutti gli oggetti creati per supportare la vista ma che non sono più necessari ora che la vista non è più disponibile.

viewDidDisappear: -

Notifica al controller della vista che la sua posizione è stato rimosso da una gerarchia vista che è everytime immagine scompare o spostarsi altra vista.

0

viewDidDisappear è chiamato ogni volta in cui la vista è scompare o si va in altra vista e viewDidUnload è chiamato quando vista del controller viene rilasciato dalla memoria. (Obsoleto in iOS 6.0: le viste non vengono più eliminate in condizioni di memoria insufficiente e quindi questo metodo non viene mai chiamato.) see the reference.

+0

Grazie, ora mi rendo conto che viewDidUnload viene chiamato quando il viewController stesso viene definitivamente distrutto, ma viewDidDisappear viene chiamato quando si passa a una vista diversa, forse più in basso nella gerarchia della vista. Quindi, per esempio, se abbiamo i controller di visualizzazione A -> B -> C, e voglio sapere quando B viene distrutta e il controllo ritorna ad A, allora dovrei usare viewDidUnload. Questo è b/c anche quando B passa a C, anche viewDidDisappear fa fuoco. – kevlar

+4

Questo non è corretto. 'viewDidUnload' è ** solo ** chiamato quando la vista viene rilasciata a causa di una condizione di memoria insufficiente. Se è rilasciato per altri motivi, non riceverai alcun evento 'viewDidUnload'. –