码迷,mamicode.com
首页 > 其他好文 > 详细

你不知道的KVO的内部实现

时间:2014-07-17 23:07:00      阅读:328      评论:0      收藏:0      [点我收藏+]

标签:http   os   io   html   代码   re   

通过强大的Runtime 实现。第一次观察某个Object 时,runtime 会创建一个新的继承自 object 对应Class 的 subClass。在这个新subClass 里它重写了被观察的key(属性)的setter 方法。然后将object 指向原来对应Class 的isa指针指向了新创建的subClass【原因很简单,实例对象保有变量,而向对象发消息实际是那isa 去类对象里找对应的实例方法去了。即重写的setter 方法】;

      这些被重写的setter 实现了如何通知观察者们。

有意思的是:ios 不希望这个机制暴露在外。除了setter ,这个动态生成的subClass 同时也重写了  -class  方法,依旧返回原先的class. 不知细看的话,被kvo 过得object 看起来和原先的object 没什么两样。【而实际是object 所指向的类 及里面的有些实例方法 变了】。

 

关于代码验证可见:    http://limboy.me/ios/2013/08/05/internal-implementation-of-kvo.html

可以不用他那个gcc 编译,在自己项目的main.m 里替换下。会有两个错。

obj - > isa   可以用 object_getClass(obj) 替换也是一样的。

你不知道的KVO的内部实现,布布扣,bubuko.com

你不知道的KVO的内部实现

标签:http   os   io   html   代码   re   

原文地址:http://www.cnblogs.com/tangbinblog/p/3851601.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!