2013-03-27 6 views
42

L'aggiunta di un osservatore aumenta il numero di ritenzione di un oggetto? Se sì, ARC gestisce anche la rimozione di questo osservatore? In caso contrario, dove dovrei rimuovere l'osservatore?È necessario NSNotificationCenter removeObserver in ARC?

+0

Vedere [questa domanda] (http://stackoverflow.com/q/13911651/730701). – Adam

+0

Questo è lo stesso come ho chiesto qualche mese fa :) –

+2

Penso che sia valido ri-fare queste domande come preferisco cercare le risposte alle domande più nuovi nel caso in cui la saggezza percepita è cambiato. – amergin

risposta

78

È necessario rimuovere in modo esplicito l'osservatore, anche si utilizza ARC. Creare un metodo dealloc e togliere lì ..

-(void)dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

Se si vede il metodo non è necessario chiamare [super dealloc]; qui, solo il metodo, senza super-dealloc necessario.

aggiornamento per Swift

È possibile rimuovere osservatore deinit metodo se si sta scrivendo il codice a Swift.

deinit { 
     NSNotificationCenter.defaultCenter().removeObserver(self) 
     } 
+0

Una domanda: quando si chiama addObserver, NSNotificationCenter conserva l'osservatore o no? Grazie. – Ricardo

+0

Non viene mantenuto! – Pei

+3

il centro di notifica non manterrà forti riferimenti degli osservatori, quindi non è necessario rimuoverli esplicitamente in 'ARC'. – holex