iOS知识复习(5)--- KVO和KVC相关

一、KVO

kvo 当一个对象使用了kvo监听,iOS系统会修改这个对象的isa指针, 改为指向一个全新的通过Runtime动态创建继承该类的子类,子类拥有自己的set方法实现, set方法实现内部会顺序调用willChangeValueForKey方法、原来的setter方法实现、 didChangeValueForKey方法,而didChangeValueForKey方法内部 又会调用监听器的observeValueForKeyPath:ofObject:change:context:监听方法

被监听的属性的值被修改时,就会自动触发KVO。 如果想要手动触发KVO,则需要我们自己调用willChangeValueForKey和 didChangeValueForKey方法即可在不改变属性值的情况下手动触发KVO ,并且这两个方法缺一不可。

子类一旦创建就会存储在内存中,但是之类实例对象是可以释放的,类是否存在和某个实例对象是否销毁是两个概念

子类中有几个方法记录:

1.isKVO 判断是否是KVO状态

2.class 还是指向原来的类,让外界无感知

3.dealloc 先释放子类在释放父类

4.setter 实际是调用子类setter方法进行消息发送

二、kvc

kvc是一种NSKeyValueCoding隐式协议所提供的机制。在iOS13之前可以通过KVC获取设置系统的私有属性,iOS13之后被禁用了。

kvc赋值过程如下图:
kvc赋值过程.png

kvc取值过程如下图:
kvc取值过程.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容