KVC
访问属性的方法:
调用读方法和写方法
点语法
KVC(Key Value Coding)
关键方法与步骤
// 用KVC设置对象属性值
// 先找指定属性的写方法
// 如果没找到则继续找 _属性名 的成员变量
// 如果没找到则继续找 属性名 的成员变量
// 如果没找到则调用 setValue:forUndefinedKey 方法
[object setValue:value forKey:key];
[object setValue:value forKeyPath:keyPath];
[object setValuesForKeysWithDictionary:keyValues];
// 用KVC读取对象属性值
// 先找指定属性的读方法
// 如果没找到则继续找 _属性名 的成员变量
// 如果没找到则继续找 属性名 的成员变量
// 如果没有找到则调用 valueforUndefinedKey: 方法
id value = [object valueForKey:key];
id value = [object valueForKeyPath:keyPath];
// 需重写(默认是抛出异常)
- (void)setValue:(id)value forUndefinedKey:(NSString *)key;
- (id)valueForUndefinedKey:(NSString *)key;
- (void)setNilValueForKey:(NSString *)key
KVO
通知模式
在一个复杂的,有状态的系统中,当一个对象的状态发生改变,如何通知系统,并对状态改变做出相应的行为是必需考虑的一个问题,在iOS中为这类问题提供了4种解决方法:
Delegates:代理
Callback:回调
KVO(Key-Value Observing):键值观察
NSNotifiactaion和NSNotificationCenter:通知中心
关键方法与步骤
// 先添加观察者监听指定属性
[object addObserver:object forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];
// 重写观察者的observeValueForKeyPath方法
// NSKeyValueObservingOptionNew 返回新值
// NSKeyValueObservingOptionOld 返回旧值
// NSKeyValueObservingOptionInitial 一旦注册就会调用一次。
// NSKeyValueObservingOptionPrior 在值改变之前调用一次,在值改变之后再调用一次
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
// 移除观察者
[object removeObserver:object forKeyPath:@"name"];