#pragma mark---KVC---
KVC:key(键)-value(值)-code(编码)
键值编码->通过key(字符串)改变value的值进行编码
可以改变对象的全局变量(公开的,不能写在延展里面)的值、属性值
字典转模型->通过KVC来实现
变量或者属性的名字必须和key的字符串统一
KVC是通过字符串(key)来找到变量进行赋值
KVC是通过属性的名字当做一个字符串(key)来给属性赋值
赋值公式: [对象名setValue:值forKey:与属性名相同的字符串];
取值公式: [对象名valueForKey:与属性名相同的字符串]
@()转化为NSNumber类型
键路径:与文件路径相似,表示键的层级关系使用.来分隔
赋值公式: [对象名setValue:值forKeyPath:键路径];
取值公式: [对象名valueForKeyPath:键路径];
content是infoModel的属性infoModel是Model的属性
content的键路径:@"infoModel.content"
#pragma mark---KVO----
KVO:key(键)-value(值)-observer(观察者)
键值观察者:通过对一个对象属性或者变量值的观察来做出对应的动作只要key对应的值发生改变就会告诉观察者新旧值的改变
通过key来判断是哪一个KVO
*条件:
1、有观察者、观察的对象
2、只要值发生改变就去触发告诉观察者值已经发生改变
3、*不再需要观察这个对象的时候移除观察者不移除就会崩溃
*给被观察的对象添加观察者:
[被观察的对象addObserver:selfforKeyPath:@"观察的属性"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld
context:nil];
*值发生改变触发:(keyPath观察的哪个属性、object可以用于传值、change里面是字典包含发生改变的新值和旧值)
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void*)context
*移除观察者:[被观察的对象removeObserver:selfforKeyPath:@"观察的属性"];