objective c - En ARC necesitamos enviar removeObserver: explícitamente?
objective-c cocoa (4)
A partir del 10.11 los observadores no están obligados a cancelar el registro en su método de desasignación.
NSNotificationCenter y NSDistributedNotificationCenter ya no envían notificaciones a los observadores registrados que pueden ser desasignados. Si el observador puede almacenarse como una referencia débil a cero, el almacenamiento subyacente almacena el observador como una referencia débil a cero. Alternativamente, si el objeto no puede almacenarse débilmente (debido a que tiene un mecanismo personalizado de retención / liberación que evitaría que el tiempo de ejecución pueda almacenar el objeto débilmente), el objeto se almacena como una referencia de reducción a cero no débil. Esto significa que los observadores no están obligados a cancelar el registro en su método de desasignación. [1]
¿Tenemos que enviar removeObserver:
explícitamente para los objetos que se han agregado como observadores a un NSNotificationCenter
antes?
Estoy un poco confundido e incapaz de encontrar la respuesta exacta para esto.
Por favor, indíqueme en detalle sobre esto, incluyendo por qué necesitamos eliminar explícitamente el Servidor, y ¿por qué el compilador no lo pone de manera implícita en la clase / aplicación?
Eliminar al observador siempre es una buena idea. Si no elimina el observador, se seguirán enviando mensajes, incluso si el objeto se desasignó. Incluso se podría adjuntar a otro objeto, lo que definitivamente llevaría a serios problemas.
Sí, debe llamar a removeObserver:
si no lo hace, la clase observada podría llamar a todas las instancias desasignadas del observador.
Siempre es necesario eliminar observadores para KVO así como para Notificaciones.