KVO的补充和补充删除观察者方法 - 计数还是幂等?

时间:2015-04-09 18:05:29

标签: cocoa cocoa-touch key-value-observing

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 releaseadd

或者,他们是 idempotent - 任意数量的remove来电都可以通过一次remove,多次add次操作停止匹配[aControl addTarget:action:forControlEvents:]是否安全?


我认为幂等方法用于[aNotificationCentre addObserver:selector:name:object:] 以及addObserver 。通知中心{{1}}电话我错了。他们幂等。但是,删除是。感谢Rob对此纠正我。

1 个答案:

答案 0 :(得分:2)

必须平衡KVO电话。每个addObserver:...必须与等效removeObserver:...平衡。并且没有机制可以取消订阅所有"就像NSNotificationCenter一样。不平衡添加的删除是错误。 KVO非常挑剔。

请注意,NSNotificationCenter绝对不是幂等的。多个相同的addObserver:...次呼叫将导致多次通知。您可以在不平衡每个removeObserver:self的情况下执行全局addObserver:...,并且在未添加时可以安全删除。