《iOS知识点梳理-KVO和KVC》

2018-12-26  本文已影响15人  学而不思则罔思而不学则殆

知识点总结中,如有幸被您观看,更有可能看到不足,期待指出交流

前言

继续学习中.....

KVC的底层实现

当一个对象调用serValue方法时,方法内部会做下面的操作:

valueForUndefinedKey:
setValue:forUnderfinedKey:

这些方法的默认实现都是抛出异常,我们可以根据需要重写他们.

KVO的底层实现
[super setAge:age]
[self willChangeValueForKey:@"age"]
[self didChangeValueForKey:@"age"]

下面这俩个方法内部会主动调用监听者内部的

-(void)observeValueForKeyPath
_person->NSObject-isa=(Class)MYPerson

由此可见,person类型已经由MYperson被改变成NSKVONotifing_MYperson

什么是KVO和KVC

KVC: 键值编码,使用字符串直接访问对象的属性
KVO: 键值观察机制,它提供了观察某一属性变化的方法

KVO的缺陷

KVO是一个对象能够观察另一个对象的属性的值,并且能够发现值的变化.block和代理,两种模式更加适合一个Controller与任何其他的对象进行通信.而KVO更加适合任何类型的对象监听另外一个任意对象(这里也可以是Controller,但一般不是Controller).这个一个对象与另外一个对象保持同步的一种方法,即单另外一种对象的状态翻身改变时,观察对象马上做出反应.它只能用来对属性做出反应,而不会用来对方法或者动作做出反应.
优点:

上一篇下一篇

猜你喜欢

热点阅读