I have an objective C class. In it, I created a init method and set up a NSNotification in it
//Set up NSNotification
[[NSNotificationCenter defaultCenter] addObserver:self
[[NSNotificationCenter defaultCenter] removeObserver:self]
The generic answer would be "as soon as you no longer need the notifications". This is obviously not a satisfying answer.
I'd recommend, that you add a call
[notificationCenter removeObserver: self] in method
dealloc of those classes, which you intend to use as observers, as it is the last chance to unregister an observer cleanly. This will, however, only protect you against crashes due to the notification center notifying dead objects. It cannot protect your code against receiving notifications, when your objects are not yet/no longer in a state in which they can properly handle the notification. For this... See above.
Edit (since the answer seems to draw more comments than I would have thought) All I am trying to say here is: it's really hard to give general advice as to when it's best to remove the observer from the notification center, because that depends:
So, the best general advice I can come up with: to protect your app. against at least one possible failure, do the
removeObserver: dance in
dealloc, since that's the last point (in the object's life), where you can do that cleanly. What this does not mean is: "just defer the removal until
dealloc is called, and everything will be fine". Instead, remove the observer as soon as the object is no longer ready (or required) to receive notifications. That is the exact right moment. Unfortunately, not knowing the answers to any of the questions mentioned above, I cannot even guess, when that moment would be.
You can always safely
removeObserver: an object multiple times (and all but the very first call with a given observer will be nops). So: think about doing it (again) in
dealloc just to be sure, but first and foremost: do it at the appropriate moment (which is determined by your use case).