如果我多次注册同一个活动,它会做什么吗?或者我需要多次取消注册?如果是后者,我如何检查我是否已经注册接收特定事件?
答案 0 :(得分:5)
您将多次收到通知。文档声称在某些情况下你会想要这个,但我想不出任何。
您可以在添加观察者之前立即使用removeObserver:
或removeObserver:name:object:
,以确保不会多次添加。使用实际上没有观察到通知的对象调用removeObserver:
没有任何问题。
或者(这可能是最高性能和最可靠的选项)您可以创建自己的NSSet
对象来准确存储您添加到该特定通知的对象,并检查您是否是那个对象即将添加副本。
答案 1 :(得分:1)
使用实际上没有观察到通知的对象调用
removeObserver:
没有任何问题。
我试图这样做,因为我认为如果它实现得很好,它就不会抱怨在没有将对象注册为观察者的情况下删除对象。但我有一个例外:
***由于未捕获的异常'NSRangeException'而终止应用程序,原因是:'无法删除关键路径“aKeyPath”的观察者,因为它未注册为观察者。'
所以,实际上,如果你是观察者,你必须管理自己。与iOS开发的奢侈品相比,这是非常荒谬的。
答案 2 :(得分:0)
NSString *obString = [NSString stringWithFormat:@"%@", session.observationInfo];
NSRange rangeOfKey = [obString rangeOfString:observedKey];
if (rangeOfKey.location != NSNotFound) {
//
NSLog(@"observing");
[session removeObserver:self forKeyPath:observedKey];
}
else {
//
NSLog(@"not observing");
}