KVO梳理

作者: Trigger_o | 来源:发表于2018-09-20 15:09 被阅读0次

1.KVO实际是KVO<NSKeyValueObserving>,是一个非正式协议

2.作用是观察者对象监听被观察对象的属性,当被观察对象的属性发生变化时,观察者对象会被告知。

3.添加方法 (手动调用)

- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context;

参数分析

object : 被观察对象

observer: 观察者对象

forKeyPath:属性

options: 策略枚举 分别是

NSKeyValueObservingOptionNew 响应方法中的change字典会包含监听属性的新值

NSKeyValueObservingOptionOld 响应方法中的change字典会包含监听属性的旧值

NSKeyValueObservingOptionInitial 响应方法中的change字典会包含监听属性的初始值,立即调用一次。

NSKeyValueObservingOptionPrior 值改变前后分别调用一次响应方法。

context: 任意类型参数 类型是void * 在响应方法中需要强转 例:NSString*typeStr = (__bridgeNSString*)context;

4.响应方法 (手动实现)

- (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable NSDictionary*)change context:(nullable void *)context;

参数分析

keyPath: 监听的属性

object:  被观察的对象

change:  一个字典类型 

context: 对应context

实现原理

1.KVO是基于runtime机制实现的,当某个类的属性对象第一次被观察时,系统就会在运行期动态地创建该类的一个派生类,例如TestClass会生成NSKVONotifying_TestClass,在这个派生类中重写基类中任何被观察属性的setter 方法。派生类在被重写的setter方法内实现真正的通知机制

2.每个类对象中都有一个isa指针指向当前类,当一个类对象的第一次被观察,那么系统会将isa指针指向动态生成的派生类,从而在给被监控属性赋值时执行的是派生类的setter方法

3.键值观察通知依赖于NSObject 的两个方法: willChangeValueForKey: 和 didChangevlueForKey:;在一个被观察属性发生改变之前, willChangeValueForKey:一定会被调用,这就会记录旧的值。而当改变发生后,didChangeValueForKey:会被调用,继而 observeValueForKey:ofObject:change:context: 也会被调用。

相关文章

  • KVO梳理

    1.KVO实际是KVO,是一个非正式协议 2.作用是观察者对象监听被观察...

  • KVO梳理与使用

    一、概述 KVO全称KeyValueObserving,是苹果提供的一套事件通知机制。允许对象监听另一个对象特定属...

  • 【OC梳理】Copy、KVC、KVO

    Copy OC中copy的作用是:利用一个源对象产生一个副本对象,它们之间不会相互影响。 关于深拷贝与浅拷贝 深拷...

  • 重新梳理iOS底层知识:KVO

    KVO概述 KVO的底层是如何实现的呢? 对于这个问题,我想大家都可以简单的聊上这么几句。 对某个实例的某一个属性...

  • iOS原理篇(一): KVO实现原理

    KVO实现原理 什么是 KVO KVO 基本使用 KVO 的本质 总结 一 、 什么是KVO KVO(Key-Va...

  • 04. KVO使用,原理,本质

    问题 KVO日常使用 KVO原理(KVO本质是什么) 如何手动触发KVO 直接修改成员变量会触发KVO吗 KVO图...

  • 20.iOS底层学习之KVO 原理

    本篇提纲1、KVO简介;2、KVO的使用;3、KVO的一些细节;4、KVO的底层原理; KVO简介 KVO全称Ke...

  • 深入理解KVO

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

  • OC语法:KVO的底层实现

    一、KVO是什么二、怎么使用KVO三、KVO的底层实现四、KVO常见面试题 一、KVO是什么 KVO全称Key-V...

  • KVO基本使用

    分三部分解释KVO一.KVO基本使用二.KVO原理解析三.自定义实现KVO 一、KVO基本使用 使用KVO,能够非...

网友评论

      本文标题:KVO梳理

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