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异常。