KVC
KVC 的全称是 Key-Value Coding,也叫做 “简直编码”,用于通过一个 “key” 来访问访问属性。
KVC 的使用
- 获取值:
- [obj valueForKey:@"key"]
- [obj valueForKeyPath:@"key.key"]
- 设置值:
- [obj setValue:newValue forKey:@"key"]
- [obj setValue:newValue forKeyPath:@"key.key"]
KVC 的原理 - setValue:forKey:
- 按照 setKey: _setKey: 的顺序查找方法:
- 如果找到方法就调用,流程结束。
- 如果没有找到方法,查看 +(BOOL)accessInstanceVariablesDirectly 方法的返回值:
- 返回 NO,调用 setValue:forUndefinedKey:,并抛出 NSUnknownKeyException。
- 返回 YES,按照 _key _isKey key isKey 的顺序查找成员变量:
- 如果找到了成员变量,直接赋值。
- 如果没有找到,调用 setValue:forUndefinedKey:,并抛出 NSUnknownKeyException。

KVC 的原理 - valueForKey:
- 按照 getKey key isKey _key 的顺序查找方法:
- 如果找到方法就调用,流程结束。
- 如果没有找到方法,查看 +(BOOL)accessInstanceVariablesDirectly 方法的返回值:
- 返回 NO:调用 valueForUndefinedKey:,并抛出 NSUnknownKeyException。
- 返回 YES:按照 _key _isKey key isKey 的顺序查找成员变量:
- 如果找到了成员变量,直接取值。
- 如果没有找到,调用 valueForUndefinedKey:,并抛出 NSUnknownKeyException。

网友评论