kvo 健值监听
使用
1.添加监听
2.移除监听
kvo的本质,添加监听后,创建了了个 NSKVONotifying_xx 对象, 继承自xx, xx实例对象的isa指针指向 NSKVONotifying_xx.
这个对象的实现大致如下:
- (void)setNum:(Int)num {
_NSSetIntValueAndNotify();
}
void _NSSetIntValueAndNotify(){
[self willChangeValueForkey:@"num"];
[super setNum: num];
[self didChangeValueForKey: @"num"];
}
- (void)didChangeValueForkey:(NString*)key {
//通知监听器,key这个属性值将要发生改变
[observer observeValueForKeyPath:key ofObject:self change:nil context:nil];
}
KVC
通过kvc修改属性会触发kvo么
会
kvc的赋值和取值过程是怎样的?原理是什么?
KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性
常见的API有
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
- (void)setValue:(id)value forKey:(NSString *)key;
- (id)valueForKeyPath:(NSString *)keyPath;
- (id)valueForKey:(NSString *)key;
setValue:forkey:的原理
valueForKey:的原理