0%

KVC

KVC,Key Value Coding,是一种通过字符串key来访问类属性的机制。不是通过调用setter、getter方法访问。

KVC和KVO都属于键值编程,而且底层实现机制都是isa-swizzing

设值流程

  1. 按顺序查找setKey:_setKey:方法,找到方法则传递参数,调用方法。否则继续。
  2. 调用accessInstanceVariablesDirectly方法。
    • YES:默认,查找成员变量:
      1. 按照_key_isKeykeyisKey 的顺序查找,找到了就直接赋值。
    • NO:进入下一步。
  3. 调用setValue:forUndefinedKey:方法,并抛出NSUnknownKeyException异常。

setValue:forUndefinedKey:方法的默认实现就是抛出异常,所以可以通过重写该方法避免抛出异常。

取值流程

基本与设值流程一致,只是把set关键字改成get。

  1. 按顺序查找getKeykeyisKey_key方法,找到方法则直接调用。否则继续。
  2. 调用accessInstanceVariablesDirectly方法。
    • YES:默认,查找成员变量:
      1. 按照_key_isKeykeyisKey 的顺序查找,找到了就直接取值。
    • NO:进入下一步。
  3. 调用valueForUndefinedKey:方法,并抛出NSUnknownKeyException异常。

参考

欢迎关注我的其它发布渠道