KVO vs NSNotification vs协议/代表?

虽然我有一些想法用于什么时候,但确切的用法还不清楚。 有人可以用例子来解释吗? 谢谢。

如果只想与一个对象通话,请使用委托。 例如,一个tableView有一个委托 – 只有一个对象应该负责处理它。

如果你想告诉大家有什么事情发生,使用通知。 例如,在内存不足的情况下,会发送通知,告诉您的应用程序存在内存警告。 由于您的应用中的许多对象可能想要降低内存使用量,这是一个通知。

我不认为KVO是一个好主意,尽量不要使用它,但如果你想知道一个属性是否已经改变,你可以听取更改。

希望有所帮助。

PS 这总结了为什么我认为KVO坏了

有一个“主/从”关系的时候使用一个委托(委托人知道类和类知道委托),在控制层次结构中有一个更高的类,当清楚的是不存在其他情况元素(主要是用户界面)将有兴趣知道class级有什么话要说。 当class级不知道谁在监听,他们有多less人时,可以使用通知,任何人和任何号码都可以注册通知。 KVO有助于听取“没有class级知晓”,当然,情况并非如此,应用KVO的class级不需要改变。

委派是一种devise模式,当您希望其他对象修改发件人的行为时使用。 例如:terminal窗口避免显示由窗口边缘剪切的任何行或字符,因为terminal窗口的委托会改变窗口的大小以确保这一点。

通知是您不需要回复时使用的模式。 例如:您会收到系统即将进入睡眠状态的通知。 该通知的发件人不关心你对此做了什么。

即使在这三种情况下都能满足您的需求,代表仍然是一个更喜欢的select:

  1. 可重用性。
  2. 自我logging。 通过检查课程的头文件,人们会立即认识到交换数据的方式。

在我看来,KVO更好,因为它是零开销的优势。 即使您没有使用/观察它们,通知也会有开销。 为了改善,你可以使用不同的NotificationCenters,但即使有一些开销将在那里(纠正我,如果我错了)。 KVO有点复杂,但是当你必须观察很多东西的时候它才值得。