iOS 代理与通知,kvc和kvo的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 代理与通知,kvc和kvo的区别相关的知识,希望对你有一定的参考价值。

通知

通知需要有一个通知中心:NSNotificationCenter,自定义通知的话需要给一个名字,然后监听。

优点:通知的发送者和接受者都不需要知道对方。可以指定接收通知的具体方法。通知名可以是任何字符串。

缺点:较键值观察(KVO)需要多点代码,在删掉前必须移除监听者。

协议

通过setDelegate来设置代理对象,最典型的例子是常用的TableView.

优点:支持它的类有详尽和具体信息。

缺点:该类必须支持委托。某一时间只能有一个委托连接到某一对象。

KVO 的优点:
 
当有属性改变,KVO 会提供自动的消息通知。这样开发人员不需要自己去实现这样的方案:每次属性改变了就发送消息通知。

这是 KVO 机制提供的最大的优点。因为这个方案已经被明确定义,获得框架级支持,可以方便地采用。

开发人员不需要添加任何代码,不需要设计自己的观察者模型,直接可以在工程里使用。

其次,KVO 的架构非常的强大,可以很容易的支持多个观察者观察同一个属性,以及相关的值。

KVC 的实现分析

KVC 运用了一个 isa-swizzling 技术。

isa-swizzling 就是类型混合指针机制。KVC 主要通过 isa-swizzling,来实现其内部查找定位的。

isa 指针,就是 is a kind of 的意思,指向维护分发表的对象的类。该分发表实际上包含了指向实现类中的方法的指针和其它数据。

http://www.isaced.com/post-201.html

http://blog.csdn.net/ajrm0925/article/details/7416419


本文出自 “11204872” 博客,请务必保留此出处http://11214872.blog.51cto.com/11204872/1754492

以上是关于iOS 代理与通知,kvc和kvo的区别的主要内容,如果未能解决你的问题,请参考以下文章

04 KVC|KVO|Delegate|NSNotification区别

NSNotificationCenter 通知使用方法详解

61 (OC)* 代理 block 通知 代理 kvo

iOS KVC 和 KVO 的学习

iOSKVC 与 KVO

KVODelegateNotification 区别及相关使用场景