Die generische Antwort wäre "sobald Sie die Benachrichtigungen nicht mehr benötigen". Dies ist offensichtlich keine zufriedenstellende Antwort.
Ich würde empfehlen, dass Sie einen Anruf hinzufügen , [notificationCenter removeObserver: self]
in Verfahren dealloc
dieser Klassen, die Sie als Beobachter verwenden möchten, da es die letzte Chance zu austragen Beobachter sauber ist. Dies schützt Sie jedoch nur vor Abstürzen, da das Benachrichtigungscenter tote Objekte benachrichtigt. Es kann Ihren Code nicht vor dem Empfang von Benachrichtigungen schützen, wenn sich Ihre Objekte noch nicht / nicht mehr in einem Zustand befinden, in dem sie die Benachrichtigung ordnungsgemäß verarbeiten können. Dafür ... Siehe oben.
Bearbeiten (da die Antwort mehr Kommentare zu zeichnen scheint, als ich gedacht hätte) Ich versuche hier nur zu sagen: Es ist wirklich schwierig, allgemeine Ratschläge zu geben, wann es am besten ist, den Beobachter aus dem Benachrichtigungscenter zu entfernen, da dies davon abhängt:
- Zu Ihrem Anwendungsfall (Welche Benachrichtigungen werden beobachtet? Wann werden sie gesendet?)
- Die Implementierung des Beobachters (Wann ist er bereit, Benachrichtigungen zu erhalten? Wann ist er nicht mehr bereit?)
- Die beabsichtigte Lebensdauer des Beobachters (Ist sie an ein anderes Objekt gebunden, z. B. eine Ansicht oder eine Ansichtssteuerung?)
- ...
Der beste allgemeine Rat, den ich finden kann: Zum Schutz Ihrer App. removeObserver:
Tanzen Sie gegen mindestens einen möglichen Fehler, dealloc
da dies der letzte Punkt (im Leben des Objekts) ist, an dem Sie dies sauber tun können. Was dies nicht bedeutet ist: "Verschieben Sie die Entfernung dealloc
einfach, bis sie aufgerufen wird, und alles wird in Ordnung sein". Entfernen Sie stattdessen den Beobachter , sobald das Objekt nicht mehr bereit (oder erforderlich) ist, Benachrichtigungen zu erhalten . Das ist genau der richtige Moment. Da ich die Antworten auf eine der oben genannten Fragen nicht kenne, kann ich leider nicht einmal erraten, wann dieser Moment sein würde.
Sie können removeObserver:
ein Objekt immer mehrmals sicher sichern (und alle bis auf den ersten Anruf mit einem bestimmten Beobachter sind Nops). Also: Überlegen Sie dealloc
, ob Sie es (erneut) tun möchten, um sicherzugehen, aber in erster Linie: Machen Sie es zum richtigen Zeitpunkt (der von Ihrem Anwendungsfall bestimmt wird).