美文网首页
深入理解KVO机制

深入理解KVO机制

作者: 落叶兮兮 | 来源:发表于2020-07-06 19:53 被阅读0次

什么是KVO机制

KVO,全称是key_value_Observing,是ios中的一种设计模式,名为观察者模式,用于检测对象的某些属性的实时变化情况并作出响应。依赖于runtime的动态机制。

观察者模式的定义:一个目标对象管理所有依赖于它的观察者对象,并在它自身的状态改变时主动通知观察者对象。这个主动通知通常是通过调用各观察者对象所提供的接口方法来实现的。观察者模式较完美地将目标对象与观察者对象解耦。

KVO的底层实现分析

系统实现KVO有以下几个步骤:

1.当类A的对象第一次被观察的时候,系统会在运行期动态创建类A的派生类。我们称为B。
2.在派生类B中重写类A的setter方法,B类在被重写的setter方法中实现通知机制。
3.类B重写会 class方法,将自己伪装成类A。类B还会重写dealloc方法释放资源。
4.系统将所有指向类A对象的isa指针指向类B的对象

通俗一点的说法是:当注册观察者的时候做的事情:

1.动态的创建一个叫NSKVONotifying_Person的子类
2.更改之前类的 isa指针为子类
3.传入一堆参数 1.监听者(将来调用observeValueForKeyPath) 2.keypath(决定了重写哪个set方法) 3.枚举(决定传哪些给你) 4.携带参数
4.根据keypath 重写子类的set方法

NSKVONotifying_Person类中setter方法

在生成的NSKVONotifying_Person的setter方法中,主要是实现了以下方法

[super setWeight:weight];
     //这两个方法会调用监听者的监听者方法 
     [self willChangeValueForKey:@"weight"];
    [self didChangeValueForKey:@"weight"];

在子类的setter方法中,根据枚举保存所有的属性值,然后调用父类setter方法,然后调用监听者的observeValueForKeyPath,把对应的值传出去通知监听者发生了什么事情。所以不能依靠isa指针来确定对象是否是一个类的成员。应该使用class方法来确定对象实例的类。

参考链接:

https://www.cnblogs.com/cleven/p/5468853.html
https://www.jianshu.com/p/67fb22783771

相关文章

  • 深入理解KVO机制

    什么是KVO机制 KVO,全称是key_value_Observing,是ios中的一种设计模式,名为观察者模式,...

  • 深入理解 KVC\KVO 实现机制 — KVC

    KVC概述KVC是Key Value Coding的简称。它是一种可以通过字符串的名字(key)来访问类属性的机制...

  • 深入理解Object-C消息转发机制

    深入理解Object-C消息转发机制 深入理解Object-C消息转发机制

  • KVO 的总结

    kvo 1.kvo介绍 KVO是一种允许对象在其他对象的指定属性发生变化时被通知的机制。 重点:为了理解KVO,首...

  • 深入理解KVO

    iOS | KVO | Objective-C KVO的本质是什么,如何手动触发KVO? 1.什么是KVO KVO...

  • 深入理解KVO

    KVO KVO全程是Key Value Observer,键值监听机制。底层实现机制是isa-swizzing K...

  • 深入理解KVO

    先来说说什么是KVO,KVO全称为Key Value Observing,键值监听机制,由NSKeyValueOb...

  • 理解 KVO 实现机制

    KVO概述 键值观察Key-Value-Observer就是观察者模式。 观察者模式的定义:一个目标对象管理所有依...

  • KVO学习

    KVO机制学习 什么是KVO?   KVO是Key-Value-Observing的缩写,通过KVO机制对象可以得...

  • 深入理解 Android 消息机制

    原文转载:深入理解 Android 消息机制 深入理解Android消息机制 在日常的开发中,Android 的消...

网友评论

      本文标题:深入理解KVO机制

      本文链接:https://www.haomeiwen.com/subject/dmvgqktx.html