KVO(Key-valueObserve):是OC的一套通知机制,用对象监听该对象的属性改变,不能对于成员变量进行观察,并在改变时接收到事件,是一对一关系,一般继承NSObject的对象都默认支持KVO。
使用:
1、通过[self.car addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:NULL];方法注册观察者,可以接收到KeyPath属性的变化
2、回调通知观察者属性发生了变化:observeValueForKeyPath:(NSString*)keyPathofObject:(id)objectchange:(NSDictionaryid> *)changecontext:(void*)context
3、当观察者不需要观察时需要“dealloc”方法中删除移除
图(1)底层原理:
1、KVO 只对属性进行观察,不能对成员变量进行观察,说明KVO观察的是setter方法
2、在addObserver:self forKeyPath: options:context:方法过后生成一个中间类(NSKVONotifying_A),NSKVONotifying_A是A的子类,类的isa指向发生了变化
图(2)3、中间类的内容:setTitle,class,dealloc,_isKVOA. 如果是继承,需要进行重写setter方法
图(3)4、在移除观察的时候isa的指向会指回来
网友评论