KVO观察与NSNotificationCenter观察

Dav*_*vid 10 cocoa binding key-value-observing nsnotification nsnotificationcenter

我想知道是否有理由在KVO和NSNotificationCenter观察中使用一个而不是另一个.性能,内存使用,速度等?

Tom*_*ing 15

这两者并不总是可以互换的.从概念上讲,KVO仅用于观察对象的属性.例如,您无法使用KVO进行替换,NSApplicationWillTerminateNotification因为它会向观察者通知发生的事件,而不是对象属性的更改.

至于性能和内存使用情况,它们都很快并且使用的内存可以忽略不计.NSNotificationQueue已经合并以阻止通知洪水.据我所知,KVO没有任何合并,这确实在一定程度上给我带来了性能问题.我正在观察数百个对象,当这些对象发生批量更新时,我会得到数百个KVO回调.这不是KVO本身的性能问题,而是由于批量更新而运行我自己的代码.

性能不是真正的问题,更多的是最适合这个问题.如果是属性更改,请使用KVO.如果不是属性更改,请根据您是需要单个观察者还是多个观察者来使用委托或通知.

  • 在不需要一个对象来了解某个特定的其他对象的情况下,最好使用通知.例如,如果应用程序中的某些设置发生更改,并且通知这些视图不必了解管理设置的对象(保留MVC),则可能需要刷新一组视图. (2认同)