IOS 学习 Key-value coding
1 前言
本节我们主要介绍键值编码,以及如何使一个类符合KVC编码。
2 详述
键-值编码是一个对于间接访问一个对象属性和关系使用字符标识的机制。它支持或者关系几个特别的Cocoa编程机制和技术,在Core Data,application scriptability,绑定技术(application scriptability和绑定技术特属于OS X)和声明属性的语言特性中。我们也能够使用键值编码简化我们的程序代码。
2.1 对象属性和KVC
对于key-value编码(或者KVC)的核心是属性的普通概念。一个涉及将对象压入状态单元的属性。一个属性能够成为两种普通类型的一种:一个属性(例如:name,title)或者一个与其他对象的关系。关系可以是对一的或者是对多的。对多关系的值的典型代表为数组(array)或者集合(set),依赖于是否关系是有序的或者无序的。
KVC通过一个字符串标示的key来定位一个对象属性。key通常符合被对象所定义的存储方法的名称或者实例变量。key必须符合固定的惯例:必须为ASCII编码,开始以小写字母,没有空格。key path是一个字符串被点分割的字符串keys被用于简化对象属性的序列的遍历。属性的序列的first key关联了一个简单的对象(employee1在下面的图形中),随后的key是关联的前面的值的属性。
2.2 使一个类符合KVC编码
NSKeyValueCoding非正式协议使KVC称为可能。它的两个方法-valueForKey:和setValue:forKey:-是特别重要的因为他们当提供key的时候会获得和设置一个属性值。NSObject提供了一个默认的这些方法的实现,并且当一个类服从了键值编码,它能够依赖于这一实现
我们如何能使得一个属性符合KVC编码依赖于是否这些属性是对象的属性,对一关系,或者对多的关系。对于这些属性和关系,一个类必须符合至少以下的一条(key相当于property key):
(1)使用名字key,类有一个声明属性;
(2)它实现了存储方法称为key并且,如果属性可变,setKey:(如果属性是一个Boolean属性,getter存储方法拥有isKey的格式);
(3)它声明了以key或者_key的形式的一个实例变量。
对于一对多关系实现KVC格式是更复杂的步骤。
3 结语
以上是所有内容,希望对大家有所帮助。
IOS 学习 Key-value coding的更多相关文章
- iOS key value coding kvc在接收json数据与 model封装中的使用
iOS key value coding kvc在接收json数据与 model封装中的使用 使用 kvc 能够极大的简化代码工作,及以后的接口维护工作: 1:先创建MovieModel类.h和 . ...
- IOS学习笔记48--一些常见的IOS知识点+面试题
IOS学习笔记48--一些常见的IOS知识点+面试题 1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...
- 【原】iOS学习47之第三方-FMDB
将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 FMDB 第三方集成到工程中,具体请看博客iOS学习46之第三方CocoaPods的安装和使用(通用方法) 1. FMDB ...
- 黑苹果-IOS学习的开始
深知安装黑苹果的不易,在这里写一下关于我的Thinkpad E430c安装黑苹果教程(Mac版本:Yosemite 10.10.4),希望能够帮助有需要的朋友. 首先贴上我的电脑配置报表: ----- ...
- 【原】iOS学习之第三方-AFNetworking1.3.0
将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 AFNetworking 第三方集成到工程中,具体请看上篇博客iOS学习46之第三方CocoaPods的安装和使用(通用方 ...
- 【转】 iOS学习之sqlite的创建数据库,表,插入查看数据
原文: http://blog.csdn.net/totogo2010/article/details/7702207 iOS sqlite数据库操作.步骤是: 先加入sqlite开发库libsql ...
- iOS学习——Quartz2D学习之UIKit绘制
iOS学习——Quartz2D学习之UIKit绘制 1.总述 在IOS中绘图技术主要包括:UIKit.Quartz 2D.Core Animation和OpenGL ES.其中Core Animati ...
- iOS学习之sqlite的创建数据库,表,插入查看数据
目录(?)[-] 新建项目sqliteDemo添加使用sqlite的库libsqlite3dylib sqlite 的方法 获取沙盒目录并创建或打开数据库 创建数据表 插入数据 查询数据库并打印数据 ...
- iOS学习之UIPickerView控件的关联选择
接上篇iOS学习之UIPickerView控件的简单使用 接着上篇的代码 http://download.csdn.net/detail/totogo2010/4391870 ,我们要实现的效果如下: ...
- iOS学习笔记22-推送通知
一.推送通知 推送通知就是向用户推送一条信息来通知用户某件事件,可以在应用退到后台后,或者关闭后,能够通过推送一条消息通知用户某件事情,比如版本更新等等. 推送通知的常用应用场景: 一些任务管理APP ...
随机推荐
- .NET/C#中对自定义对象集合进行自定义排序的方法
一个集合可否排序,要看系统知不知道排序的规则,像内建的系统类型,int ,string,short,decimal这些,系统知道怎么排序,而如果一个集合里面放置的是自定义类型,比如自己定义了一个Car ...
- excel 上标和下标
开始--字体--设置单元格格式--上标/下标
- 整合ssm框架之配置文件
原文:https://blog.csdn.net/zwyanqing/article/details/53039591 ssm整合 一.applicationContext.xml 1.配置数据源 & ...
- 创建第一个servlet程序--HelloServlet
这篇文章是用来纪念我第一次创建一个Servlet程序,步骤我会写得详细点,也可以参考一下,后续我会将SpringMVC 跟ssh的搭建分别更新(ps:不忙的话我会更新) 工具:java jdk 1.6 ...
- rabbitmq重装依赖的erlang 要注意
今天安装的erlang和rabbitmq版本不匹配导致出现各种问题,在使用正确版本安装后出现问题,在日志中找到报错信息: {"init terminating in do_boot" ...
- Linux-TCP 出现 RST 的几种情况
导致“Connection reset”的原因是服务器端因为某种原因关闭了Connection,而客户端依然在读写数据,此时服务器会返回复位标志“RST”,然后此时客户端就会提示“java.net.S ...
- samba服务的高级进阶配置
本文将学习一下几个方面的内容,将会结合具体的实验来一步步实现. 1. 用户账号的映射 2. 使用IP对客户端进行访问控制 3. 使用域名对客户端进行访问控制 4. 使用通配符对客户端进行访问控制 5. ...
- React(0.13) 定义一个动态的组件
1.因为jsx将两个花括号之间的内容渲染为动态值,只需要引用对应的变量即可 <!DOCTYPE html> <html> <head> <title>R ...
- 【JavaScript】浅析IIFE(立即执行函数表达式)的作用
什么是IIFE IIFE就是立即执行函数表达式(Immediately-Invoked Function Expression) 为什么需要IIFE 应用IIFE有两个比较经典的使用场景, 第一就是在 ...
- SQL 中 Arg的使用
今天在写SQL脚本时用到了Arg这个函数,发现了一个问题就是如果取平均数的字段是int类型那么,无论你怎么平均都不会有小数位出来. 因为Arg默认将你取的平均值转换为了你的字段对应的类型int.那么如 ...