io di solito uso NSNotification come l'esempio riportato di seguito:Che è un modo migliore per rimuovere Notifica osservatore
In viewDidLoad:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(foo:) name:kName1 object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(bar:) name:kName2 object:nil];
In viewDidUnload e dealloc:
[[NSNotificationCenter defaultCenter] removeObserver:self];
Ma un amico mi ha detto che non dovrei usare [[NSNotificationCenter defaultCenter] removeObserver:self];
perché rimuoverà tutti gli osservatori inclusa la super classe. Mi ha suggerito di usare il seguente codice per rimuovere uno per uno gli osservatori.
[[NSNotificationCenter defaultCenter] removeObserver:self name:kName1 object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:kName2 object:nil];
ho controllato il codice della libreria ASIHttpRequest (https://github.com/pokeb/asi-http-request). Segue il suggerimento dei miei amici.
Voglio sapere se il mio amico ha ragione o no? Secondo me, dato che l'istanza attuale verrà scaricata o dealloc, anche la notifica della super classe è inutile. E c'è qualche sistema che la sottoclasse UIViewController usi?
Che cosa significa rimuovere l'osservatore di "super classe"? Un osservatore è un'istanza di oggetto non una classe. Se verrà deallocato, sarà necessario annullare la registrazione di tutte le notifiche, anche se sono state registrate nel codice di super classe. – MrTJ
@MrTJ Intendo l'osservatore delle notifiche che viene aggiunto nel metodo di super. Forse il padre dell'istanza di classe deve anche osservare alcune notifiche quando viene chiamato il metodo viewDidUnload di child. – tangqiaoboy
Potrebbe essere, potrebbe essere.Se si desidera annullare la registrazione in viewDidUnload, quindi per sicurezza, suggerisco di utilizzare il secondo metodo (senza registrazione degli osservatori) – MrTJ