浅谈NotificationCenter、KVC、KVO、Delegate

KVO(Key Value Observing):一对多,观察者模式,键值观察机制,它提过了观察某一树形变化的方法,极大简化了代码。

KVC(Key Value Coding):是键值编码,一个对象在调用setValue的时候,

   ·检查是否存在相应key的set方法,存在就调用set方法。

   ·set方法不存在,就查找_key的成员变量是否存在,存在就直接赋值。

   ·如果没有就调用valueForUndefinedKey和setValue:forUnderfinedKey。

Delegate:通常发送者和接受者的关系是直接的一对一的关系。

   ·代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获     取到那些类的指针。

   ·可以减少框架复杂度。消息的发送者(sender)告知接受者(receiver)某个事件将要发生,delegate同意然后发送者响应事件,delegate机制使得接受者可以改变发送者的行为。

Notification:观察者模式,通常发送者和接受者的关系是间接的多对多关系。消息的发送者告知接受者事件已经发送或者将要发送,仅此而已,接受者并不能反过来影响发送者的行为。

区别

   ·效率肯定是delegate比NSNotification高。

   ·delegate方法比natification更加直接,需要关注返回值,所以delegate方法往往包含should这个很传神的词。相反的,notification最大的特色就是不关心结果,所以notification往往用did这个词汇。

   ·两个模块之间联系不是很紧密,就用notification传值,如多线程之间传值用notification。

   ·得了尕特只是一种较为简单的回调,且主要用在一个模块中,例如底层功能完成了,需要把一些值传到上层去,就事先把上层的函数通过delegate传到底层,然后在底层call这个delegate,它们都在一个模块中,完成一个功能,例如说NavigationController从B界面到A点返回按钮(调用popViewController方法)用delegate比较好。

你可能感兴趣的:(浅谈NotificationCenter、KVC、KVO、Delegate)