I’m not sure the exact reason for it (other than the ambiguity described below), but I’ve read that multiple observers shouldn’t be added to the NSNotificationCenter for the same object. However, I would like to add a second selector/name pair to the same object in the notification center.
I added the first one as follows:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(method1:)
name:@"method1Notification"
object:nil];
Option 1:
To add the second (like below) would seem to add “self” to the notification center again.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(method2:)
name:@"method2Notification"
object:nil];
Is this okay? Or, if necessary, is there a way to simply add another selector/name pair to the “self” entry in the default notification center?
Option 2: (Pseudocode)
[[[NSNotificationCenter defaultCenter] mySelfObserver]
addSelector:@selector(method2:)
name:@"method2Notification"
object:nil];
Ambiguity:
It would seem that either way, if it were added a second time, in dealloc: it might need to be removed as an observer twice?
[[NSNotificationCenter defaultCenter] removeObserver:self];
// ... REMOVE IT AGAIN IF OBSERVER ADDED TWICE TO NOTIFICATION CENTER?
I think you’re a little confused. It’s perfectly fine to add a given observer any number of times, as long as the notifications or objects are different.
If you add an observer multiple times for a single notification/object combo, you will receive multiple notifications — your notification method will be called once for each time you added the observer. This is usually not desirable, and I think that’s the recommendation that you’ve seen.
You also only need to call
removeObserver:once for any observer, no matter how many things it’s observing.Later, when appropriate (
viewWillDisappear:, orviewDidUnload:for view controllers, depending on the nature of the notifications;deallocfor other objects):