【发布时间】:2011-03-05 14:35:44
【问题描述】:
这与其说是一个问题,不如说是在警告其他人以节省一些时间。
iOS 3/iPhone OS 3(我假设 Mac OS X 和 iOS 4)上的 NSNotificationCenter 具有以下行为:
如果您多次为确切的特定通知注册自己,NSNotificationCenter 将不识别冗余,而是会向您发出与您注册观察一样多的通知。
这几乎不是你想看到的行为,而且几乎总是偶然的。
例子:
我希望我的视图控制器在新数据进入时接收来自单例网络对象的通知:
- (void) viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(newDataArrived:)
name:NewDataArrivedNotification
object:[NetworkListener sharedNetworkListener]];
}
但之前我已经在 viewWillAppear 中放入了相同的内容:
- (void) viewWillAppear
{
[super viewWillAppear];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(newDataArrived:)
name:NewDataArrivedNotification
object:[NetworkListener sharedNetworkListener]];
}
请注意,它是完全相同相同的通知,解析为相同的观察者、发送者和通知名称。
在这种情况下,如果我不删除其中一个 addObserver 调用,我将收到重复通知到我的视图控制器。
在多线程环境中,这是一个充满伤害的世界。相信我。
只是把它放在那里,以防其他人遇到这样的事情。
【问题讨论】:
-
很高兴收到警告 - 您可能应该将大部分内容放在答案中并接受它:)(提示 Alex Trebek 喃喃自语“必须说出你的答案……”)
-
花了我足够长的时间,但完成了。
标签: iphone ios macos nsnotificationcenter nsnotifications