浅谈NotificationCenter、KVC、KVO、Del
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比较好。