KVC,Key Value Coding,是一种通过字符串key来访问类属性的机制。不是通过调用setter、getter方法访问。
KVC和KVO都属于键值编程,而且底层实现机制都是isa-swizzing。
设值流程
- 按顺序查找
setKey:
、_setKey:
方法,找到方法则传递参数,调用方法。否则继续。 - 调用
accessInstanceVariablesDirectly
方法。- YES:默认,查找成员变量:
- 按照
_key
、_isKey
、key
、isKey
的顺序查找,找到了就直接赋值。
- 按照
- NO:进入下一步。
- YES:默认,查找成员变量:
- 调用
setValue:forUndefinedKey:
方法,并抛出NSUnknownKeyException异常。
setValue:forUndefinedKey:
方法的默认实现就是抛出异常,所以可以通过重写该方法避免抛出异常。
取值流程
基本与设值流程一致,只是把set关键字改成get。
- 按顺序查找
getKey
、key
、isKey
、_key
方法,找到方法则直接调用。否则继续。 - 调用
accessInstanceVariablesDirectly
方法。- YES:默认,查找成员变量:
- 按照
_key
、_isKey
、key
、isKey
的顺序查找,找到了就直接取值。
- 按照
- NO:进入下一步。
- YES:默认,查找成员变量:
- 调用
valueForUndefinedKey:
方法,并抛出NSUnknownKeyException异常。