在KVO中,我订阅了来自潜在发件人的更改通知:
[potentialSender addObserver: self
forKeyPath: NSStringFromSelector(@selector(aProperty))
options: 0
context: myKVOHandle];
我可以取消订阅:
[potentialSender removeObserver: self
forKeyPath: NSStringFromSelector(@selector(aProperty))
context: myKVOHandle];
可以使用this c idiom创建KVO句柄。
这些是否会计算 - 所以每个add
都必须直接与remove
配对并在retain
之前 - 这就像之前的ARC release
和add
?
或者,他们是 idempotent - 任意数量的remove
来电都可以通过一次remove
,多次add
次操作停止匹配[aControl addTarget:action:forControlEvents:]
是否安全?
我认为幂等方法用于[aNotificationCentre addObserver:selector:name:object:]
以及。通知中心{{1}}电话我错了。他们不幂等。但是,删除是。感谢Rob对此纠正我。addObserver
答案 0 :(得分:2)
必须平衡KVO电话。每个addObserver:...
必须与等效removeObserver:...
平衡。并且没有机制可以取消订阅所有"就像NSNotificationCenter
一样。不平衡添加的删除是错误。 KVO非常挑剔。
请注意,NSNotificationCenter
绝对不是幂等的。多个相同的addObserver:...
次呼叫将导致多次通知。您可以在不平衡每个removeObserver:self
的情况下执行全局addObserver:...
,并且在未添加时可以安全删除。