什么是KVC?(What Is Key-Value Coding?)

什么是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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值