gpt4 book ai didi

objective-c - NSNotificationCenter 和 Key Value Observing 技术有什么区别?

转载 作者:太空狗 更新时间:2023-10-30 03:31:25 26 4
gpt4 key购买 nike

我刚刚看了一些关于 KVO 的教程,但我还没有发现它存在的原因。 NSNotificationCenter 不是一种更简单的观察对象的方法吗?

我是 Stackoverflow 的新手,如果我问这个问题的方式有问题,请告诉我!

最佳答案

通知和 KVO 提供相似的功能,但有不同的权衡。

  • 通知很容易理解。 KVO ……很难……理解(至少要理解如何很好地使用它)。

  • 通知需要修改观察到的代码。被观察者必须明确地生成它提供的每个通知。只要观察到的代码符合 KVC(无论如何它都应该符合),KVO 对观察到的代码是透明的。

  • 即使您不使用通知,也会产生开销。每次被观察代码发布通知时,都必须针对系统中的每个观察结果进行检查,即使没有人在观察该对象(即使没有人在观察任何东西)。如果系统中有超过几百个观察值,这可能非常重要。如果有几千个,这可能是一个严重的问题。 KVO 对任何未实际观察到的对象的开销为零。

一般来说,我不鼓励使用 KVO,因为我认为一些特定的实现问题会导致难以正确使用。如果不了解您的父类(super class),很难观察您的父类(super class)也观察到的对象。它对字符串文字的严重依赖使得在编译时很难发现小的拼写错误。总的来说,我发现严重依赖它的代码变得复杂且难以阅读,并开始发现远距离的幽灵般的错误。 NSNotification 代码往往更直接,您可以看到发生了什么。随机代码不会在您意想不到的时候运行。

总而言之,KVO 是一个重要的特性,开发人员需要了解它。由于它的零开销优势,越来越多的低级对象依赖它。但对于新开发人员,我通常建议他们更多地依赖通知而不是 KVO。

还有第三种方式。您可以保留一个监听器列表,并在事情发生变化时向他们发送消息,就像委托(delegate)方法一样。有些人称这些为“多播委托(delegate)”,但“监听器”在这里更准确,因为它们不像委托(delegate)那样修改对象的行为。如果您需要在系统中进行大量观察,而无需增加 KVO 的复杂性,那么以这种方式进行操作会比 NSNotification 快得多。

关于objective-c - NSNotificationCenter 和 Key Value Observing 技术有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7040734/

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