一、KVC
KVC(Key Value Coding):键值编码
1.赋值
对一个对象调用
setValue:forKey:
方法,给对象的属性赋值。通过KVC进行赋值可以进行自动类型转换对一个对象调用
setValue:forKeyPath:
方法,通过内部的点语法传可以层层访问内部的属性,给对象的属性的属性赋值。通过KVC赋值可以修改类的私有成员变量
</br>
2.利用KVC进行字典转模型
- 对模型对象调用
setValuesForKeysWithDictionary:
方法可以直接将字典转为模型。单通常不建议使用该方法,仅在简单的字典转模型时使用。因为: - 字典中的所有key必须都能在模型的属性中找到,如果有找不到的就会报错。
- 如果模型中带有模型,则赋值后的类型不一致。
</br>
3.取值
- 对一个对象调用
valueForKey:
或valueForKeyPath:
方法获取一个对象的某属性 - 对一个包含多个同类型对象的数组中调用
valueForKeyPath:
方法,可以获取数组中所有对象的对应属性值。返回一个数组。
</br>
4.利用KVC进行模型转字典
- 对模型对象调用
dictionaryWithValuesForKeys:
方法,传入一个key名数组,即可生成一个字典
</br>
二、KVO
KVO(Key Value Observing):键值监听
当某个对象的属性值发生改变时,用KVO监听该变化
- 绑定监听
对一个对象调用addObserver:forKeyPath:options:context:
方法,给对象绑定一个监听器(观察者) - 移除监听
调用removeObserver:forKeyPath:
方法,移除监听 - 处理监听
重写observeValueForKeyPath:ofObject:change:context:
方法