今天是键值编码,网上有很多文章,可以百度。不太理解的就看官方文档吧
键-值编码
键值编码是一种运用字符串标识符来间接访问一个对象的属性和关系的机制。它尤其强化并关联了多种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 属性侧重一个类是某种类型的值。