gpt4 book ai didi

cocoa - KVO 的添加和删除观察者方法——计数还是幂等?

转载 作者:行者123 更新时间:2023-12-03 16:35:29 25 4
gpt4 key购买 nike

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之前 - 这就像pre-ARC 保留释放

或者,它们是 idempotent – 任意数量的 add 调用都可以通过单个 remove 停止,多个 remove 操作无需匹配的 add 安全吗?

<小时/>

我相信幂等方法用于[aControl addTarget:action:forControlEvents:] 以及[aNotificationCentre addObserver:selector:name:object:] 。我对通知中心 addObserver 调用的看法是错误的。它们不是幂等的。然而,删除是。感谢 Rob 纠正我的错误。

最佳答案

KVO 调用必须平衡。每个 addObserver:... 必须与等效的 removeObserver:... 保持平衡。并且没有像 NSNotificationCenter 那样的“取消订阅全部”的机制。不平衡添加的删除是一个错误。 KVO 非常挑剔。

请注意,NSNotificationCenter 绝对不是幂等的。多个相同的 addObserver:... 调用将导致多个通知。可以执行全局 removeObserver:self 而无需平衡每个 addObserver:...,并且在未添加时可以安全地删除。

关于cocoa - KVO 的添加和删除观察者方法——计数还是幂等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29545808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com