La réponse générique serait «dès que vous n’avez plus besoin des notifications». Ce n’est évidemment pas une réponse satisfaisante.
Je vous recommande d'ajouter un appel [notificationCenter removeObserver: self]
à la méthode dealloc
de ces classes, que vous avez l'intention d'utiliser en tant qu'observateurs, car c'est la dernière chance de désinscrire proprement un observateur. Cependant, cela ne vous protégera que contre les plantages dus à la notification des objets morts par le centre de notification. Il ne peut pas protéger votre code contre la réception de notifications, lorsque vos objets ne sont pas encore / plus dans un état dans lequel ils peuvent gérer correctement la notification. Pour cela ... Voir ci-dessus.
Modifier (puisque la réponse semble attirer plus de commentaires que je ne l'aurais pensé) Tout ce que j'essaie de dire ici, c'est: il est vraiment difficile de donner des conseils généraux sur le meilleur moment pour supprimer l'observateur du centre de notification, car cela dépend:
- Sur votre cas d'utilisation (Quelles notifications sont observées? Quand sont-elles envoyées?)
- La mise en œuvre de l'observateur (Quand est-il prêt à recevoir des notifications? Quand n'est-il plus prêt?)
- La durée de vie prévue de l'observateur (est-elle liée à un autre objet, par exemple, une vue ou un contrôleur de vue?)
- ...
Donc, le meilleur conseil général que je puisse donner: protéger votre application. contre au moins un échec possible, faites la removeObserver:
danse dealloc
, car c'est le dernier point (dans la vie de l'objet), où vous pouvez le faire proprement. Cela ne veut pas dire: "reporter simplement la suppression jusqu'à ce qu'elle dealloc
soit appelée, et tout ira bien". Au lieu de cela, supprimez l'observateur dès que l'objet n'est plus prêt (ou requis) pour recevoir des notifications . C'est exactement le bon moment. Malheureusement, ne connaissant pas les réponses à aucune des questions mentionnées ci-dessus, je ne peux même pas deviner quand ce moment serait.
Vous pouvez toujours en toute sécurité removeObserver:
un objet plusieurs fois (et tous sauf le tout premier appel avec un observateur donné seront nops). Donc: pensez à le faire (à nouveau) dealloc
juste pour être sûr, mais avant tout: faites-le au moment approprié (qui est déterminé par votre cas d'utilisation).