1、KVC简介
全称是Key-value coding,翻译成键值编码。顾名思义,在某种程度上跟map的关系匪浅。它提供了一种使用字符串而不是访问器方法去访问一个对象实例变量的机制。
KVC的用法: 简单来说就是给对象的私有属性赋值.
常用到两个方法:
// 层级结构较浅时使用
- (id)valueForKey:(NSString *)key;
- (void)setValue:(id)value forKey:(NSString *)key;
// 层级结构较深时使用
- (id)valueForKeyPath:(NSString *)keyPath;
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
应用: 更改系统控件的一些私有属性, 点语法无法获取, 采用KVC解决了我们的难题.
2、KVO简介
全称是Key-value observing,翻译成键值观察。提供了一种当其它对象属性被修改的时候能通知当前对象的机制。KVO机制适合实现model和controller类之间的通讯。
KVO的用法: 简单来说就是动态监听属性变化.
常用到的方法:
// 添加监听者
- (void)addObserver:(id)object
forKeyPath:(NSString *)keyPath
options:(NSKeyValueObservingOptions)options
context:(void *)context;
// 监听方法, 所有KVO统一调用这个方法, 最好判断对象类型
// 使用[object isKindOfClass: []]进行判断
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context;
// 记得在dealloc方法中移除监听
- (void)removeObserver:(NSObject *)observer
forKeyPath:(NSString *)keyPath;
应用:
图片/视频下载时监听进度, 制作进度条;
界面下拉刷新.