美文网首页
如何验证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实现?

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