KVO基本原理?

  • 1 )KVO是基于runtime机制实现的

  • 2 )当某个类的属性对象第一次被观察时,系统就会在运行期动态地创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的setter 方法。派生类在被重写的setter方法内实现真正的通知机制

  • 3 )如果原类为Person,那么生成的派生类名为NSKVONotifying_Person

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

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

摘自文章

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 当观察某对象A的时候,KVO机制动态创建一个对象A当前类的子类,并未这个新的子类重写了被观察属性keyPath的s...
    uproject阅读 3,682评论 1 1
  • 面试题参考1 : 面试题[http://www.cocoachina.com/ios/20150803/12872...
    江河_ios阅读 5,692评论 0 4
  • KVC 什么是KVC KVC是Key-Value-Coding 的简称。 KVC是一种可以直接通过字符串的名字ke...
    Jack_deng阅读 4,788评论 0 0
  • KVC 什么是 KVC KVC 是 Key-Value-Coding 的简称。 KVC 是一种可以直接通过字符串的...
    LeeJay阅读 6,563评论 6 41
  • 为了防止多个线程同时访问一个属性或者变量,最为有效的方式是采用同步锁。 1、同步锁(互斥锁): 等待的线程处于休眠...
    labi3285阅读 2,707评论 0 0

友情链接更多精彩内容