简述NotificationCenter、KVC、KVO、Delegate?并说明它们之间的区别?

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

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

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

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

    如果_key没找到,就查找相同名称的key,存在就赋值。

    如果没有就调用valueForUnderfinedkey和setValue:forUndefinedKey。

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

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

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

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

区别:

    效率肯定是delegate比NSNotification高。

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

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

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

你可能感兴趣的:(简述NotificationCenter、KVC、KVO、Delegate?并说明它们之间的区别?)