KVC
- 键值编码, 使用字符串直接访问对象的属性.
底层实现
当一个对象调用 setValue 方法时, 方法内部会执行下面的操作
- 检查是否存在相应的 key 的 set 方法. 如果存在, 就调用 set 方法
- 如果 set 方法不存在, 就会查找与 key 相同名称并且带下划线的成员属性, 如果有, 则直接给成员属性赋值
- 如果没有找到 _key, 就会查找相同名称的属性 key, 如果有就直接赋值.
- 如果还没找到, 就调用 valueForUndefinedKey: 和 setValue:forUndefinedKey: 方法
这些方法的默认实现是抛出异常, 我们可以根据需要重写他们.
KVO
- 键值观察机制, 提供了某一属性变化的方法.
底层实现 - KVO 是基于 runtime 机制实现
- 使用 isa 混写 (isa-swizzling), 当一个对象 (假设是 person 对象, person 的类是 LCPerson) 的属性值 (假设 person 的 age) 发生变化的时候, 系统会自动生成一个类,