@chinese-ppmt
2018-04-16T05:25:48.000000Z
字数 642
阅读 1487
iOS
KVO,全称:Key-Value Observing (键值观察)
,是Objective-C
中观察者模式的一种实现(另一种是通知)
。
作用: 对观察者(self,此时是VC)
关心的对象(self.person)
的属性(@"name")
进行监测,如果该属性值变化了,立马告诉观察者,以便观察者做出对应的处理。
[self.person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];
运用了设计模式:观察者模式;
开发人员不需要实现属性值变化了发送通知的方案,系统已经封装好了,大大减少开发工作量;
支持多个观察者观察同一属性,或者一个观察者监听不同属性。
不能提供自定义的selector
不能传入block
官方文档翻译如下:
- KVO的实现用的是
isa-swizzling
技术。isa
指针,顾名思义,指向维持一个分派表的 包含了类实现方法的指针和其它数据 的对象类。- 当一个观察者注册一个对象的属性时,被观察对象的isa指针被修改,指向一个中间类而不是真正的类。因此,isa指针的值并不一定反映实例的真正类。
- 不能依赖
isa
指针来确定类的成员变量。相反,你应该使用类方法来确定对象实例属于哪个类。
参考链接:
1. ios KVC内部机制探索
2. 自定义KVO(探索KVO底层本质)
3.