5

ho creato un osservatore notifica metodo init di mio controller della vista in questo modo:Dove devo rimuovere un osservatore delle notifiche?

[[NSNotificationCenter defaultCenter] 
        addObserver:self 
        selector:@selector(saveState) 
        name:UIApplicationWillResignActiveNotification 
        object:nil]; 

Dove è il posto migliore per chiamare removeObserver:name:object: per questa notifica. Attualmente lo sto chiamando nel mio metodo dealloc, ma volevo sapere se ciò potrebbe causare problemi.

risposta

8

No, hai capito bene. dealloc è la posizione corretta per rimuovere gli osservatori di notifica (a meno che non si abbia qualche motivo specifico per cui sia necessario rimuovere prima l'osservatore).

+0

Grazie per questo, bello avere la conferma. –

+0

Potrebbe postare un riferimento alla documentazione ufficiale. – rraallvv

1

È sempre possibile rimuovere l'osservatore in viewWillDisappear: oppure, quando si è finito di usarlo e non ce n'è più bisogno, è possibile inserirlo in una funzione.

+0

A meno che la vista non venga visualizzata di nuovo. Penso che il tuo approccio funzionerebbe se avessi iniziato l'osservatore delle notifiche in 'viewWillAppear:'. –

1

Se il -saveState solo bisogno di eseguire una volta quando è attivo, allora si può removeObserver all'interno del -saveState.

+0

Presumibilmente, vorrebbe salvare di nuovo se l'applicazione diventa attiva e quindi si reimposta nuovamente attiva. –

+0

Hai ragione. Assuono che si registrerà nuovamente come osservatore quando l'app diventerà attiva. – AechoLiu

+0

Ho appena usato 'saveState' come esempio, ma probabilmente dovrebbe essere chiamato più e più volte (ad esempio quando l'app entrerà in background) quindi mi piace usare' dealloc' meglio. –