Key-Vlaue Coding Apple官方翻译

今天是键值编码,网上有很多文章,可以百度。不太理解的就看官方文档吧

键-值编码

键值编码是一种运用字符串标识符来间接访问一个对象的属性和关系的机制。它尤其强化并关联了多种Cocoa编程的机制和技术,体现在Core Data,应用程序的可接受性,绑定技术,和被声明属性的语言特性当中。(可接受性和绑定特指在OS X当中的cocoa编程)。你也可以用键-值编码的方式来简化你的代码。

对象属性和KVC

键-值编码的核心是属性的通用概念。一个属性指的是一个封装对象的基本单元。属性一般有两种状态:一个属性值(如:name,title,subtitle,或者tixtColor)或者是一种和其他对象的关系。关系又可以是一对一,一对多的。一对多的关系(尤其是数组和集合)的值,取决于关系是有序还是无序的。

键-值编码通过一个字符串标识符也就是键来定位一个对象的属性。一个键通常符合一个存取方法的名字或者对象定义的实例变量(ps:’name’-name;就是’键’-值 的结构)。键必须符合几种条件:键必须是ASCII编码的,以小写字母开头,没有空格。一个键路径是一个由多个点分割开来的字符串,键路径被用来具体说明遍历记录对象的属性队列(company.employee.name)。

属性在序列中的第一个键和具体的对象相关,并且每一个子队列里的键被用来评估与上一个属性相关度。

如何匹配一个类的键值编码

NSKeyValueCoding的非正式协议使得KVC成为可能。它的两个方法—valueForKey:和setValue:forKey: 显得尤为重要,因为它们可以分别获取和设置一个给定键的值。NSObject类提供了这两个方法的默认实现,并且如果一个类符合键-值编码,它就能引用这个实现方法。

如何使得属性的键值编码相符合,取决于属性(资产属性 property)是否是属性(attribute )【1】、是一对一的关系,还是一对多的关系。对于普通的属性或者一对一得关系,类一定会实现至少一个下面给出的有序方法。

1、类声明了一个名为 “key"的属性

2、它实现了名为"key"的访问方法,并且如果属性是可变的,setKey:。(如果属性是一个BOOL值,getter 方法会是isKey)

3、它声明了一个名为key 或者_key的方法。

对于一对多类型的键值编码匹配需要更加复杂的处理。

注【1】翻译property 和 attribute 翻译过来都是属性的意思,property 有资产的意味,一个属性属于某一个类,attribute 属性侧重一个类是某种类型的值。

时间: 2024-10-10 12:37:19

Key-Vlaue Coding Apple官方翻译的相关文章

WatchKit-Programming-Guide-Apple-Watch开发指南官方翻译及总结

鉴于CSDN的Markdown很多bug,大家请看这里: WatchKit-Programming-Guide-Apple-Watch开发指南官方翻译及总结 Overview ### Developing for Apple Watch Apple Watch可以让用户以一种很私密,不招摇的样式查看信息(官方文档是这样的哈,但是我想大多数人不会不招摇的查看Apple Watch上的信息??).用户可以在不拿出手机的情况下,通过查看Apple Watch快速的获取重要的信息. Apple Watc

dojo 官方翻译 dojo/_base/lang 版本1.10

官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/_base/lang.html#dojo-base-lang 应用加载声明: require(["dojo/_base/lang"], function(lang){ // lang now contains the module features }); clone() 克隆任何对象或者元素节点,返回:一个新的对象. require(["dojo/_base/lang

android Bluetooth(官方翻译)

Bluetooth Using the Bluetooth APIs, an Android application can perform the following: 使用蓝牙APIs,一个Android应用可以进行如下操作: Scan for other Bluetooth devices 扫描其他蓝牙设备 Query the local Bluetooth adapter for paired Bluetooth devices 查找本地已经配对的蓝牙设备 Establish RFCOM

【SFA官方翻译】使用 Kubernetes、Spring Boot 2.0 和 Docker 的微服务快速指南

[SFA官方翻译]使用 Kubernetes.Spring Boot 2.0 和 Docker 的微服务快速指南 原创: Darren Luo SpringForAll社区 今天 原文链接:https://dzone.com/articles/quick-guide-to-microservices-with-kubernetes-sprin 作者:Piotr Mińkowski 译者:Darren Luo 在本教程中你将学习如何使用 Kubernetes 和 Docker 快速启动并运行 Sp

dojo 官方翻译 dojo/json 版本1.10

官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/json.html#dojo-json require(["dojo/json", "dojo/dom", "dojo/on", "dojo/domReady!"], function(JSON, dom, on){ on(dom.byId("convert"), "click",

dojo 官方翻译 dojo/domReady 版本1.10

官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/domReady.html#dojo-domready dom加载完成后,执行. require(["dojo/domReady!"], function(){ // will not be called until DOM is ready }); 通常dojo/domReady没有也不需要设定一个返回值,而且,它是被放在加载模块数组的最后加载. require(["

dojo 官方翻译 dojo/string 版本1.10

官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/string.html#dojo-string require(["dojo/string"], function(string){ var a = string.pad("pad me", 10); var b = string.rep("dup", 10); var c = string.substitute("${repla

android nfc(官方翻译)

为了充分详细的学习nfc相关的知识,决定阅读官方英文文档,并翻译下来供大家阅读. NFC Basics There are two major uses cases when working with NDEF data and Android: Reading NDEF data from an NFC tag Beaming NDEF messages from one device to another with Android Beam? The Tag Dispatch System

dojo 官方翻译 dojo/_base/array

官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/_base/array.html#dojo-base-array array模块dojo进行了很好的封装,如果想要调用必须先加载该模块: require(["dojo/_base/array"], function(array){ // array contains the features }); indexOf() 返回值:字符串在数组中第一次出现的位置,如果没有找到默认返回