KVO 的添加和删除观察者方法——计数还是幂等?
KVO's add & remove observer methods – counted or idempotent?
在 KVO 我订阅了接收来自潜在发件人的更改通知:
[potentialSender addObserver: self
forKeyPath: NSStringFromSelector(@selector(aProperty))
options: 0
context: myKVOHandle];
我可以退订:
[potentialSender removeObserver: self
forKeyPath: NSStringFromSelector(@selector(aProperty))
context: myKVOHandle];
可以使用 创建 KVO 句柄。
是否像这样的调用 计数 – 所以每个 add
必须直接配对并在 remove
之前 – 这就像 pre-ARC retain
和 release
?
或者,它们是 idempotent – 任意数量的 add
调用都可以被单个 remove
、多个 remove
没有匹配的操作 add
是安全的吗?
我相信幂等方法用于 [aControl addTarget:action:forControlEvents:]
和 [aNotificationCentre addObserver:selector:name:object:]
。我对通知中心 addObserver
电话的看法是错误的。它们不是幂等的。但是,删除是。感谢 Rob 纠正我的错误。
KVO 调用必须平衡。每个 addObserver:...
必须与等价的 removeObserver:...
相平衡。 "unsubscribe all" 没有像 NSNotificationCenter
那样的机制。不平衡添加的删除是错误的。 KVO很挑剔。
注意NSNotificationCenter
绝对不是幂等的。多个相同的 addObserver:...
调用将导致多个通知。可以做一个全局 removeObserver:self
而不平衡每个 addObserver:...
,并且在没有添加时删除是安全的。
在 KVO 我订阅了接收来自潜在发件人的更改通知:
[potentialSender addObserver: self
forKeyPath: NSStringFromSelector(@selector(aProperty))
options: 0
context: myKVOHandle];
我可以退订:
[potentialSender removeObserver: self
forKeyPath: NSStringFromSelector(@selector(aProperty))
context: myKVOHandle];
可以使用
是否像这样的调用 计数 – 所以每个 add
必须直接配对并在 remove
之前 – 这就像 pre-ARC retain
和 release
?
或者,它们是 idempotent – 任意数量的 add
调用都可以被单个 remove
、多个 remove
没有匹配的操作 add
是安全的吗?
我相信幂等方法用于 [aControl addTarget:action:forControlEvents:]
和 。我对通知中心 [aNotificationCentre addObserver:selector:name:object:]
addObserver
电话的看法是错误的。它们不是幂等的。但是,删除是。感谢 Rob 纠正我的错误。
KVO 调用必须平衡。每个 addObserver:...
必须与等价的 removeObserver:...
相平衡。 "unsubscribe all" 没有像 NSNotificationCenter
那样的机制。不平衡添加的删除是错误的。 KVO很挑剔。
注意NSNotificationCenter
绝对不是幂等的。多个相同的 addObserver:...
调用将导致多个通知。可以做一个全局 removeObserver:self
而不平衡每个 addObserver:...
,并且在没有添加时删除是安全的。