KVO

KVO (Key-value-observing) 键值监听

iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)

利用RuntimeAPI动态生成一个子类,并且让instance对象的isa指向这个全新的子类,当修改instance对象的属性时,会调用Function的_NSSetXXXValueAndNotify函数
1、willChangeValueForKey:
2、父类原来的setter
3、didChangeValueForKey:
4、内部会触发监听器(Oberser)的监听方法(observeValueForKeyPath:ofObject:change:context:)

如何手动触发KVO?

手动调用willChangeValueForKey:和 didChangeValueForKey:
直接修改成员变量不会触发KVO
通过KVC修改属性会触发KVO

KVC(Key-Value coding)键值编码

常见的api
-(void)setValue:(id)value forKey:(NSString *)key;
-(void)setValue:(id)value forKeyPath:(NSString *)keyPath;

-(id)valueForKey:(NSString *)key;
-(id)valueForKeyPath:(NSString *)keyPath;

Person *p = [[Person alloc] init];
// 设置年龄
[p setValue:@18 forkey:@"age"];
[p setValue:@18 forkeyPath:@"age"];
两个结果相同

// forKeyPath 可以设置Person里面对象的属性值,
// forKeyPath中可以利用.运算符, 就可以一层一层往下查找对象的属性 
[p setValue:@18 forkeyPath:@"xiaoming.age"];

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS底层原理总结 - 探寻KVO本质 对小码哥底层班视频学习的总结与记录。 面试题:iOS用什么方式实现对一个对...
    爱吃兔兔的胡萝卜吖阅读 298评论 0 1
  • KVO: KVO的全称是Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变...
    曹来东阅读 647评论 0 0
  • 上半年有段时间做了一个项目,项目中聊天界面用到了音频播放,涉及到进度条,当时做android时候处理的不太好,由于...
    DaZenD阅读 3,038评论 0 26
  • 一. KVO 1. KVO的基本使用 KVO的全称是Key-Value Observing,俗称“键值监听”,可以...
    Imkata阅读 312评论 0 0
  • 烦人……注定是不平凡的一天, 刚考完试出来, 感觉结果并不好, 然后,糊里糊涂的,上了个很不顺利的厕所…… 天公也...
    XUMIAO阅读 104评论 0 0