简思Key & KeyPath

在KVC中有着这样的两种相似的方法

  • setValue:forKeyPath:
  • setValue:forKey:

这两种方法中的Key和KeyPath总是不理解,到底两者之间有什么区别呢?

在官方文档中对这两个参数有着这样的解释:

  • keyPath: A key path of the form relationship.property (with one or more relationships): for example “department.name” or “department.manager.lastName.”
  • key: The name of one of the receiver's properties.

个人理解,keyPath是一个完整的‘路径’,指向关系链中最末关系节点的属性,举一个不恰当的例子:

  • 文件路径:/Users/choshoryo/Desktop/123.png

这就是一个完整的路径,它的‘关系链’结构就是/文件夹/文件夹/文件夹/文件,最终真正要处理的是最末端文件夹中的123.png文件。同理,keyPath中真正要赋值的也是最末端的property,在找到该属性之前,系统会沿着这条关系链一层一层去寻找。因此,keyPath传入的参数应是一条描述着与接收者有关系的对象的属性的路径。

而相对的,key传入的参数则是接收者自己本身的属性。

针对keyPath为参数的KVC方法,系统是通过valueForKey:方法查找最终要赋值的属性,官方文档中有如此说明:

  • Discussion (- setValue:forKeyPath:)
    The default implementation of this method gets the destination object for each relationship using valueForKey:, and sends the final object a setValue:forKey: message.
    此作为补充加深理解
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    朽木自雕也阅读 1,621评论 6 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,288评论 19 139
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,858评论 0 9
  • KVO与KVC简单理解 ///////////////////////////////////////我是该死的分...
    李某lkb阅读 424评论 0 1
  • 挥豪落笔的江南,风铃叮当间错过的期盼,你转身似要微笑的眼角,如何又皱了眉弯 马蹄哒哒惹的飞燕乱,落花时节的江南芍药...
    风凉阅读 153评论 0 0