加载中...

KVC机制如何通过key找到value


  • setValue:forKey:
  1. 首先搜索setKey:方法。
    (key指成员变量名,首字母大写)
  2. 上面的setter方法没找到, 如果类方法accessInstanceVariablesDirectly返回YES
    那么按 _key, _isKey, key, iskey的顺序搜索成员名。(NSKeyValueCodingCatogery中实现的类方法,默认实现为返回YES
  3. 如果没有找到成员变量,调用setValue:forUnderfinedKey:
  • valueForKey:

1.
首先按getKeykeyisKey的顺序查找getter方法,找到直接调用。如果是BOOLint等内建值类型,会做NSNumber的转换。
2.
上面的getter没找到,查找countOfKeyobjectInKeyAtindex、KeyAtindexes格式的方法。如果countOfKey和另外两个方法中的一个找到,那么就会返回一个可以响应NSArray所有方法的代理集合的NSArray消息方法。
3.
还没找到,查找countOfKeyenumeratorOfKeymemberOfKey格式的方法。如果这三个方法都找到,那么就返回一个可以响应NSSet所有方法的代理集合。
4.
还是没找到,如果类方法accessInstanceVariablesDirectly返回YES。那么按 _key_isKeykeyiskey的顺序搜索成员名。
5.
再没找到,调用valueForUndefinedKey


文章作者: km
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 km !
  目录