美文网首页
KVC 和 Properties 有什么区别?【译】

KVC 和 Properties 有什么区别?【译】

作者: TomatosX | 来源:发表于2018-04-25 01:32 被阅读10次

我已经阅读了注释的文档,但是,我仍然不明白,KVC 和属性访问(property accessor)方法有什么区别?他们不一样吗?如何区分调用 setValue:forKeyPath 的点和简单访问器(simple accessors)?

但是,我仍然不明白,KVC 和属性访问(property accessor)方法有什么区别?


KVC 是调用属性访问器方法或以其他方式访问属性的一种方法。

“以其他方式访问”是什么意思?

对于 KVC 而言,没有访问器方法的实例变量会被视为非正式属性。
如果没有找到匹配的访问器对,它将直接获取或设置实例变量的值。
(是的,在现代代码中这是不值得使用的,总是为任何你想访问的任何东西声明一个 @property,反之,不要使用 KVC 来访问任何不属于公共属性的东西。)

属性访问器方法是 KVC 在其存在的情况下会调用的方法(KVC 和每个理智的程序员都倾向于直接 ivar 访问)。访问者可以获取或设置实例变量,如合成访问者所做的那样,或者访问某些其他存储。

访问器是实现,属性是接口,KVC 是使用它们的一种方式。

如何区分调用 “setValue:forKeyPath” 的点和简单访问器?


键路径是一个字符串,而属性访问表达式是一个表达式。编译器检测属性访问表达式并将其转换为一个或多个 Objective-C 消息,而键路径由 KVC 在运行时检测。

所以,当你使用键路径时:

[someObject setValue:theValue forKeyPath:@"foo.bar.baz"];

你知道这是一个键路径,因为

  1. 它是一个字符串,如本例中的字符串文字语法 @“...” 所示;
  2. 将密钥路径字符串传递给 setValue:forKeyPath: 检测。

使用键路径是使用 KVC 来访问指定的属性。它会代表你发送任何相关的访问者消息。

当您使用属性访问表达式时:

someObject.foo.bar.baz = theValue;

你知道这是一个属性访问表达式,因为你没有用字符串标识属性。你正在使用自己的代码访问它们(发送访问者消息)。

没有太多理由以任何形式使用 KVC;当你在作者/编译时知道该属性时,最好声明 @property 并自己访问属性,无论是使用属性访问表达式还是消息表达式([[[someObject foo] bar] setBaz:theValue])。使用 KVC 的时间是在运行时间之前不知道要访问的属性,这很少见。它主要是 KVO,Cocoa Bindings,Core Animation 等部分背后的构建块技术。

大多数情况下,你只需要自己访问属性。

原文链接:What's the difference between KVC and Properties?

相关文章

  • KVC 和 Properties 有什么区别?【译】

    我已经阅读了注释的文档,但是,我仍然不明白,KVC 和属性访问(property accessor)方法有什么区别...

  • Android 中 px 、dp、dip 和 sp 有什么 区别

    imhet 译自 stackoverflow 问题描述 Android 中px、dp、dip 和 sp 有什么区别...

  • 设计模式

    设计模式 1.delegate和notification什么区别,什么情况使用? 2.描述一下KVO和KVC。 K...

  • 大连滕泰科技学习笔记2020-04-01

    1,知识点汇总 1,1 xml文件定义1,2 xml文件和properties有什么区别1,3 xml文件如何读取...

  • (译)MaterialDesign(三)-Properties

    其他文章 Material具有某些不变的特性和固有的行为 了解这些材料的特征将帮助您以与Material Desi...

  • KVC详解

    KVC 目录结构KVC定义KVC取值和设置KVC使用keyPathKVC处理字典KVC作用 参考:iOS KVC和...

  • IOS KVC,KVO

    KVC KVC是key Value Coding的缩写,主要方法有setValue:forKey和valueFor...

  • KVC,KVO

    KVC , KVO KVC和KVO的区别及应用 KVC/KVO原理 1. KVC键值编码 KVC,即是指NSKey...

  • KVC && KVO

    1.KVC 关于KVC和KVO,我之前的总结文章有写过,但是实际上我在平日工作里,KVC和KVO使用的相对较少,不...

  • KVC

    通过KVC修改属性会触发KVO吗 KVC的赋值和取值过程是怎么样的 原理是什么 KVC 常见的API有 setVa...

网友评论

      本文标题:KVC 和 Properties 有什么区别?【译】

      本文链接:https://www.haomeiwen.com/subject/zitelftx.html