美文网首页
如何验证KVO实现?

如何验证KVO实现?

作者: 往事不许提 | 来源:发表于2019-04-08 10:50 被阅读0次

很久之前的一次面试中,被问到:KVO是如何实现的?

然后原理相信大部分人都知道:

     创建了一个被观察对象所属类的子类KVONotifying_A类,然后重写被观察属性的的setter方法,在赋值前调用NSObject的willChangeValueForKey方法,在赋值后调用NSObject的didChangeValueForKey方法,然后利用isa混写,这样调用class方法的时候,你会发现得到仍然是A,这样就隐藏了创建子类的事实。

面试官又问:你是如何知道的?如何验证的?

答:debug时,在调用栈中看到了`KVONotifying_A`这个类,然后就觉得应该和A有联系,然后查阅开发者文档看到的。可以通过打印所属类类名来验证。

但是面试官不置可否。

确实,直接通过[object class],获取到的仍是A,因为isa混写,但是通过    object_getClassName(object)就可以得到KVONotifying_A,可能这是当初没有说清楚的地方。

再者,我们可以创建一个名为KVONotifying_A的子类,然后发现KVO失效了,这也是一个有力的佐证。

相关文章

  • 如何验证KVO实现?

    很久之前的一次面试中,被问到:KVO是如何实现的? 然后原理相信大部分人都知道: 创建了一个被观察对象所属类的子类...

  • iOS KVO实现细节验证

    验证 KVO objective-c 中的 kvo 是观察者模式的一种oc实现。 不管使用方式了,直接看看kvo是...

  • iOS探索KVO实现原理,重写KVO

    写响应式编程博客时,提到了KVO,今天我们探索一下KVO的实现原理及如何自己实现KVO功能 首先简单的KVO实现 ...

  • Runtime 实现 KVO

    转载自:如何自己动手实现 KVO KVO (Key-Value Observing) KVO 是 Objectiv...

  • 通知 /KVO、KVC相关

    如何实现通知机制? KVO ·kvo是OC对观察者设计模式的又一实现 ·APPLE使用了isa混写实现kvo KV...

  • 问题[※※※※※]:如何关闭默认的KVO的默认实现,并进入自定义

    请参考:《如何自己动手实现 KVO》

  • iOS底层原理汇 - 探索KVO本质

    问题 iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?) 如何手动触发KVO ? 首先需要了解KVO...

  • KVO的本质

    面试问题: iOS用什么方式实现对一个对象的KVO? 如何手动触发KVO? KVO简介 KVO就是键值观测。有时候...

  • IOS基础知识-KVO原理篇

    问题 iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)如何手动触发KVO KVO的全称 Key-V...

  • KVO

    iOS用什么方式实现对一个对象的KVO 如何手动触发KVO 直接修改成员变量会触发KVO么? KVO [self....

网友评论

      本文标题:如何验证KVO实现?

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