lo general el uso NSNotification como el ejemplo siguiente:que es una mejor manera de eliminar observador Notificación
En viewDidLoad:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(foo:) name:kName1 object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(bar:) name:kName2 object:nil];
En viewDidUnload y dealloc:
[[NSNotificationCenter defaultCenter] removeObserver:self];
Pero un amigo me dijo que no debería usar [[NSNotificationCenter defaultCenter] removeObserver:self];
porque eliminará todos los observadores, incluida la superclase. Me sugirió que usara el siguiente código para eliminar al observador uno por uno.
[[NSNotificationCenter defaultCenter] removeObserver:self name:kName1 object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:kName2 object:nil];
He comprobado el código de la biblioteca ASIHttpRequest (https://github.com/pokeb/asi-http-request). Sigue la sugerencia de mis amigos.
Quiero saber si mi amigo tiene razón o no? En mi opinión, dado que la instancia actual será descarga o dealloc, la notificación de la superclase también es inútil. ¿Y hay alguna notificación de uso de la subclase UIViewController del sistema?
¿Qué significa que eliminará el "observador de superclase"? Un observador es una instancia de objeto, no una clase. Si se va a desasignar, debe anular el registro de todas las notificaciones, incluso si se registraron en el código de la superclase. – MrTJ
@MrTJ Me refiero al observador de notificación que se agrega en el método de super. Quizás el padre de la instancia de clase también necesite observar algunas notificaciones cuando se llama al método viewDidUnload del niño. – tangqiaoboy
Podría ser, podría ser.Si desea cancelar el registro en viewDidUnload, entonces para seguridad también le sugiero usar el segundo método (por anulación de registro de observador) – MrTJ