什么是KVC?(What Is Key-Value Coding?)
来源:互联网 发布:树莓派centos扩展sd卡 编辑:程序博客网 时间:2024/05/29 15:58
什么是KVC?
KVC是一种间接访问对象属性的机制,使用字符串识别属性,而不是通过调用一个访问器方法或直接访问实例变量。在本质上,KVC定义了你的应用实现的访问器方法的模式和方法签名。
访问器方法,顾名思义,提供访问你应用程序数据模型的属性值的方法。有两种基本形式的访问器——get访问器和set访问器。Get 访问器,也称为getters,返回一个属性值。Set 访问器,也称为setters,设置属性值。有getter和setter来处理对象属性和许多关系。
在应用中实现KVC兼容的访问是一个重要的设计原则。访问器帮助执行适当的数据封装并促进与其他技术的集成例如KVO,Core Data,Cocoa绑定和脚本。KVC方法在许多情况下,也被用来简化应用代码。
KVC的基本方法在NSKeyValueCoding
中声明,是Objective-C的非正式协议,NSObject
提供默认实现。
KVC支持对象值属性以及标量类型和结构。非对象参数和返回类型会检测、自动装包、拆包,见标量和结构帮助( Scalar and Structure Support)中描述。
KVC和脚本
Cocoa中支持的脚本使应用可以很容易利用脚本访问它的模型对象,该对象封装了应用的数据。当用户执行AppleScript命令,该命令的目标是直接跳转到应用模型对象来完成工作。
OS X中的脚本在很大程度上依赖于KVC来支持AppleScript命令的执行。在编写脚本应用,一个模型对象定义了支持的一组key。每个key代表对象的一个属性。脚本相关的key有文字、字体、文件和颜色。KVC API提供了一种通用和自动的方式来查询对象key对应的值,并为这些key设置新值。
当你设计应用的对象,你应该为你的模型对象定义一组key,并实现相关的访问器方法。当你定义应用的脚本时,你可以指定这些key支持的脚本类。如果你支持KVC,你会“免费”获得很多脚本的支持。
在AppleScript中,对象层级定义应用中模型对象的结构。大多数AppleScript命令指定应用中一个或多个对象,通过深入到这个对象的层级结构从父容器中获取子元素。你可以适用KVC在类描述中定义属性之间的关系。详情参见描述属性关系( Describing PropertyRelationships)。
Cocoa脚本支持利用KVC获取和设置脚本对象的信息。Objective-C非正式协议NSScriptKeyValueCoding
提供了KVC额外功能,包括通过多值key的index获取和设置键值并转换键值到一个合适的数据类型。
使用KVC简化代码
你可以在自己的代码中使用KVC方法。例如,在OS X NSTableView
和NSOutlineView
对象都关联每个列的标示符字符串。通过标示符标示你希望显示的关键属性,你可以极大的简化你的代码
列表1中展示了NSTableView
代理方法不使用KVC的实现。列表2中展示了使用KVC返回相应值,使用列标示符作为key
列表1 不使用KVC实现数据源方法
- (id)tableView:(NSTableView *)tableview objectValueForTableColumn:(id)column row:(NSInteger)row { ChildObject *child = [childrenArray objectAtIndex:row]; if ([[column identifier] isEqualToString:@"name"]) { return [child name]; } if ([[column identifier] isEqualToString:@"age"]) { return [child age]; } if ([[column identifier] isEqualToString:@"favoriteColor"]) { return [child favoriteColor]; } // And so on.}
列表2 使用KVC实现数据源方法
- (id)tableView:(NSTableView *)tableview objectValueForTableColumn:(id)column row:(NSInteger)row { ChildObject *child = [childrenArray objectAtIndex:row]; return [child valueForKey:[column identifier]];}
官方原文地址:
https://developer.apple.com/library/prerelease/tvos/documentation/Cocoa/Conceptual/KeyValueCoding/Articles/Overview.html#//apple_ref/doc/uid/20001838-SW1
- 什么是KVC?(What Is Key-Value Coding?)
- What Is Key-Value Coding?
- KVC (Key -Value Coding)
- Key-Value Coding 01 - What is key-Value Coding
- Key-Value coding (KVC)
- kvc (key value coding)
- KVC (Key-Value Coding)
- Key-Value Coding (KVC)
- Key-Value-Coding(KVC)
- 键值编码(KVC)KEY VALUE CODING
- KVC(key value coding)/ KVO(key value observing)
- KVC(Key-value coding)机制
- iOS KVC(Key-Value Coding)
- KVC编程指南(Key-Value Coding Programming Guide)
- OC_键值编码KVC(Key-Value Coding)
- Key-Value Coding (KVC) and Generic Programming
- Key-Value Coding (KVC) and Generic Programming
- KVC(key value coding)的使用
- 【人工智能】遗传算法(GA)入门—以求解一元函数最大值的优化问题为例
- Java中关键字
- 浅谈机器学习中的QR分解
- hashCode与equals的区别与联系
- 高效敏感词过滤JAVA实现(DFA算法)
- 什么是KVC?(What Is Key-Value Coding?)
- 上传文件
- oracle数据库中设置系统用户密码
- Enumeration接口
- lightoj 1294 - Positive Negative Sign
- Java内存回收机制(第三讲)
- Android studio 导入第三方库
- android Socket用法详解
- MyEclipse10中安装activiti插件后,新建activiti项目未显示maven dependencies