A resposta genérica seria "assim que você não precisar mais das notificações". Obviamente, esta não é uma resposta satisfatória.
Eu recomendo que você adicione um [notificationCenter removeObserver: self]
método dealloc
de chamada dessas classes, que você pretende usar como observadores, pois é a última chance de cancelar o registro de um observador de forma limpa. Isso, no entanto, apenas o protegerá contra travamentos devido ao centro de notificação notificando objetos mortos. Ele não pode proteger seu código contra o recebimento de notificações, quando seus objetos ainda não estão / não estão mais em um estado em que possam lidar adequadamente com a notificação. Para isso ... Veja acima.
Editar (já que a resposta parece atrair mais comentários do que eu pensava) Tudo o que estou tentando dizer aqui é: é realmente difícil dar um conselho geral sobre quando é melhor remover o observador do centro de notificação, porque isso depende:
- No seu caso de uso (quais notificações são observadas? Quando elas são enviadas?)
- A implementação do observador (quando está pronto para receber notificações? Quando não está mais pronto?)
- O tempo de vida pretendido do observador (está vinculado a algum outro objeto, digamos, uma visualização ou controlador de visualização?)
- ...
Portanto, o melhor conselho geral que posso dar: para proteger seu aplicativo. contra pelo menos uma possível falha, faça a removeObserver:
dança dealloc
, já que esse é o último ponto (na vida do objeto), onde você pode fazer isso de forma limpa. O que isso não significa é: "adie a remoção até que dealloc
seja chamado, e tudo ficará bem". Em vez disso, remova o observador assim que o objeto não estiver mais pronto (ou necessário) para receber notificações . Esse é o momento certo. Infelizmente, por não saber as respostas a nenhuma das perguntas mencionadas acima, não posso nem imaginar quando seria esse momento.
Você sempre pode proteger removeObserver:
um objeto várias vezes (e todas, exceto a primeira chamada com um determinado observador, serão nops). Então: pense em fazer (de novo) dealloc
apenas para ter certeza, mas antes de mais nada: faça no momento apropriado (que é determinado pelo seu caso de uso).