1.KVC与KVO

一、KVC

KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值。而不需要调用明确的存取方法。这样就可以在运行时动态地访问和修改对象的属性。而不是在编译时确定,这也是iOS开发中的黑魔法之一。很多高级的iOS开发技巧都是基于KVC实现的。

目的
  • 间接的修改或获取对象的属性,降低程序(类与类)之间的耦合度。
基本使用
  • setValue: forKey 、 valueForKey: 和 setValue: forKeyPath 、valueForKeyPath: 两组方法
  • forkey 和 forKeyPath 的区别在于,forKeyPath 是可以多深层次访问的。例如:有两个类 Psrson 和 Student,Psrson 类里面有个Student 类型的对象 student ,Student 类里面有个 score 属性。那么就可以这么使用:[person setValue:@80 forKeyPath:@"student.score" ]
使用场景
  1. 通过键值路径动态获取或设置对象的属性;
  2. 模型和字典转换(setValuesForKeysWithDictionary:);
  3. 修改一些控件的内部属性(例如个性化UITextField中的placeHolderText的属性);
  4. 访问和修改私有变量,对于类里的私有属性,Objective-C是无法直接访问的,但是KVC是可以的。

二、KVO

KVO(Key-Value Observing)键值观察。它是一种观察者模式的衍生。其基本思想是,对目标对象的某属性添加观察,当该属性发生变化时,通过触发观察者对象实现的KVO接口方法,来自动的通知观察者。

目的
  • 就是监听某个对象的属性,在该属性的值发生变化时,通知观察者,及时作出响应。
使用步骤
//1、给对象的属性添加观察者
[person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew |NSKeyValueObservingOptionOld context:@"myObserver"];
//2、若该属性发生改变,系统自动调用下面的方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context;
//3、所有观察者模式的性能都不好,需要及时移除
[person removeObserver:self forKeyPath:@"name"]; 
使用场景
  1. 下拉刷新、下拉加载监听UIScrollView的 contentoffsize ;
  2. webview混排监听 contentsize ;
  3. 监听模型属性实时更新UI;
  4. 监听控制器 frame 改变,实现抽屉效果。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容