La respuesta genérica sería "tan pronto como ya no necesite las notificaciones". Obviamente, esta no es una respuesta satisfactoria.
Le recomiendo que agregue una llamada [notificationCenter removeObserver: self]
al método dealloc
de esas clases, que tiene la intención de usar como observadores, ya que es la última oportunidad para anular el registro de un observador limpiamente. Sin embargo, esto solo lo protegerá contra fallas debido a que el centro de notificaciones notifica objetos muertos. No puede proteger su código contra la recepción de notificaciones, cuando sus objetos aún no están / ya no están en un estado en el que puedan manejar correctamente la notificación. Para esto ... Ver arriba.
Editar (ya que la respuesta parece generar más comentarios de los que hubiera pensado) Todo lo que estoy tratando de decir aquí es: es realmente difícil dar consejos generales sobre cuándo es mejor eliminar al observador del centro de notificaciones, porque eso depende:
- En su caso de uso (¿Qué notificaciones se observan? ¿Cuándo se envían?)
- La implementación del observador (¿Cuándo está listo para recibir notificaciones? ¿Cuándo ya no está listo?)
- El tiempo de vida previsto del observador (¿está vinculado a algún otro objeto, por ejemplo, una vista o un controlador de vista?)
- ...
Entonces, el mejor consejo general que se me ocurre: proteger su aplicación. contra al menos un posible fracaso, removeObserver:
baila dealloc
, ya que ese es el último punto (en la vida del objeto), donde puedes hacerlo limpiamente. Lo que esto no significa es: "solo posponga la eliminación hasta que dealloc
se llame, y todo estará bien". En su lugar, elimine al observador tan pronto como el objeto ya no esté listo (o no sea necesario) para recibir notificaciones . Ese es el momento exacto. Desafortunadamente, al no conocer las respuestas a ninguna de las preguntas mencionadas anteriormente, ni siquiera puedo adivinar cuándo sería ese momento.
Siempre puede utilizar removeObserver:
un objeto de forma segura varias veces (y todas menos la primera llamada con un observador determinado serán nops). Entonces: piense en hacerlo (nuevamente) dealloc
solo para estar seguro, pero ante todo: hágalo en el momento apropiado (que está determinado por su caso de uso).