美文网首页
KVO实现原理

KVO实现原理

作者: 153037c65b0c | 来源:发表于2018-04-24 16:11 被阅读17次

KVO是基于runtime机制实现的,使用了isa-swizzling技术(isa替换)

下面是一个例子用来证明在添加KVO之后的变化

创建一个Person类,添加两个属性age和name,添加一个方法打印信息- (void)printInfo。

分别在添加KVO前,添加后,移除后打印信息

打印信息如下

观察这些打印得到的信息有:

1.在添加KVO后Person类变成Person的子类NSKVONotifying_Person。

2.添加KVO观察的属性age的setter方法在添加后函数指针发生改变,其他属性和方法在添加前,后,以及删除后不变。

由此可以得出结论:

1.KVO是基于runtime机制实现的,使用了isa-swizzling技术。

2.添加Observer时,会通过runtime实现一个继承该类的子类,子类名为NSKVONotifying_+父类类名,将之前父类的isa指针指向了这个子类,重写了被观察的对象setter方法,并且在重写中添加了willChangeValueForKey:(被观察属性发生改变之前)以及didChangeValueForKey:(被观察属性发生改变之后),从而激活键值通知机制。

3.在移除observer时,又将isa指向原来的类对象中。

然后我们在分析一下, 在真正调用的setAge:的情况下, 根据消息机制我们知道它先通过isa找到对应对象的类, 也就是现在NSKVONotifying_Person, 然后再去找setAge:,由于NSKVONotifying_Person这个对象重写了这个方法, 那么就会直接取当前的实现, 也就是带有willChangeValueForKey:以及didChangeValueForKey:, 那么自然就实现了对KVO的实现了。

参考:isa-swizzling

相关文章

  • iOS KVO

    KVO 示例 KVO的实现原理

  • 常见面试题--KVC和KVO

    1、KVO实现原理 2、KVC原理

  • 知识集锦

    https://github.com/starainDou 欢迎点星 KVO实现原理 KVO基本原理: 1 kvo...

  • iOS - 自定义KVO

    之前我们已经了解过了KVO的底层实现原理,不过呢,在我们开始实现自定义KVO之前再来简单回顾下KVO的实现原理 1...

  • iOS - KVO

    [toc] 参考 KVO KVC 【 iOS--KVO的实现原理与具体应用 】 【 IOS-详解KVO底层实现 】...

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

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

  • iOS高级进阶之KVO

    KVO的原理 分析原理 使用 手动调用 自己实现KVO NSObject+KVOBlock.h NSObject+...

  • iOS 自定义KVO

    通过在了解KVO的实现原理和实现步骤之后,我们可以手动实现KVO,具体可以看最后的demo,这里只讲实现原理 添加...

  • iOS 进阶原理知识笔记

    KVO实现原理 KVO基本原理: 1 kvo是基于runtime机制实现的 2 当某个类的属性对象第一次被观察时,...

  • iOS 进阶原理知识随笔

    KVO实现原理 KVO基本原理: 1 kvo是基于runtime机制实现的 2 当某个类的属性对象第一次被观察时,...

网友评论

      本文标题:KVO实现原理

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