Ver*_*ous 8 cocoa objective-c key-value-coding
所以,我已经阅读了有关注释的文档
Objective-C 2.0的点语法和键值编码是正交技术.无论是否使用点语法,都可以使用键值编码,无论是否使用KVC,都可以使用点语法.但是,两者都使用"点语法".在键值编码的情况下,语法用于分隔键路径中的元素.重要的是要记住,当您使用点语法访问属性时,您将调用接收器的标准访问器方法.
然后它提供了一个例子,据说显示了两者之间的差异.但是,我仍然没有得到,KVC和属性访问器方法有什么区别?他们不一样吗?我如何区分调用setValue:forKeyPath:和简单访问器的点?
Pet*_*sey 15
但是,我仍然没有得到,KVC和属性访问器方法有什么区别?
KVC是一种调用属性访问器方法或以其他方式访问属性的方法.
"否则访问"是什么意思?对于KVC目的,没有访问器方法的实例变量计为非正式属性.如果找不到匹配的访问者对,它将直接获取或设置实例变量的值.(是的,这在现代代码中不值得使用.总是声明@property要打算在其他地方访问的任何内容,反之,不要使用KVC来访问任何非公共属性的内容.)
属性访问器方法是KVC在它们存在时将调用的方法(首选,由KVC和每个理智的程序员,通过直接的ivar访问).访问器可以获取或设置实例变量,如合成访问器那样,或访问某些其他存储器.
访问器是实现,属性是接口,KVC是使用它们的一种方式.
我如何区分调用setValue:forKeyPath:和简单访问器的点?
键路径是字符串,而属性访问表达式是表达式.编译器评估属性访问表达式并将其转换为一个或多个Objective-C消息,而KVC在运行时评估密钥路径.
因此,当您使用密钥路径时:
[someObject setValue:theValue forKeyPath:@"foo.bar.baz"];
Run Code Online (Sandbox Code Playgroud)
你知道它是一个关键路径,因为(1)它是一个字符串,在这种情况下由字符串文字语法表示@"…",(2)你传递了键路径字符串,setValue:forKeyPath:以便进行评估.
使用密钥路径使用KVC访问命名属性.它将代表您发送任何相关的访问者消息.
使用属性访问表达式时:
someObject.foo.bar.baz = theValue;
Run Code Online (Sandbox Code Playgroud)
您知道它是属性访问表达式,因为您没有使用字符串标识属性.您正在自己的代码中访问它们(发送访问者消息).
没有太多理由以任何形式使用KVC; 当你在作者/编译时知道属性时,最好有一个@property声明并自己访问属性,无论是属性访问表达式还是消息表达式([[[someObject foo] bar] setBaz:theValue]).使用KVC的时间是在运行时间之前您不知道要访问哪个属性,这是非常罕见的.它主要是KVO背后的构建块技术,Cocoa Bindings,Core Animation的部分等.
大多数情况下,您只想自己访问属性.
| 归档时间: |
|
| 查看次数: |
2586 次 |
| 最近记录: |