这不是一个问题,而是警告他人节省一些时间.
iOS 3/iPhone OS 3上的NSNotificationCenter(我还假设Mac OS X和iOS 4)具有以下行为:
如果多次注册自己的确切具体的通知,NSNotificationCenter将不认识的冗余和你已注册的观察,而不是将火过许多通知你.
这几乎不是你想要看到的行为,几乎总是偶然的.
例:
我希望我的视图控制器在新数据进入时从单例网络对象接收通知:
- (void) viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(newDataArrived:)
name:NewDataArrivedNotification
object:[NetworkListener sharedNetworkListener]];
}
Run Code Online (Sandbox Code Playgroud)
但早些时候我已经把同样的东西放在viewWillAppear:
- (void) viewWillAppear
{
[super viewWillAppear];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(newDataArrived:)
name:NewDataArrivedNotification
object:[NetworkListener sharedNetworkListener]];
}
Run Code Online (Sandbox Code Playgroud)
请注意,它是完全相同的通知,解析为相同的观察者,发件人和通知名称.
在这种情况下,如果我不删除其中一个addObserver调用,我将向我的视图控制器发送重复通知.
在多线程环境中,这是一个受到伤害的世界.相信我.
只是把它放在那里,以防有其他人遇到这样的事情.