IOS深入学习(21)之Key-value coding
http://blog.csdn.net/developer_zhang/article/details/12840567
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深入学习(21)之Key-value coding的更多相关文章
- iOS key value coding kvc在接收json数据与 model封装中的使用
iOS key value coding kvc在接收json数据与 model封装中的使用 使用 kvc 能够极大的简化代码工作,及以后的接口维护工作: 1:先创建MovieModel类.h和 . ...
- 开源中国iOS客户端学习
开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客 http://blog.csdn.net/column/details/xfzl-kykhd.html ...
- iOS阶段学习第一天笔记(Mac终端的操作)
前言部分 原本从事的是.NET开发,一直在要不要转iOS 中犹豫徘徊,经过复杂的内心挣扎终于鼓起勇气辞职脱产学习iOS;希望通过四个月的 学习后能够拿到理想的薪资.以下是学习过程中的学习笔记,为了方便 ...
- 原 iOS深入学习(Block全面分析)http://my.oschina.net/leejan97/blog/268536
原 iOS深入学习(Block全面分析) 发表于1年前(2014-05-24 16:45) 阅读(26949) | 评论(14) 39人收藏此文章, 我要收藏 赞21 12月12日北京OSC源创会 ...
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
- ios网络学习------4 UIWebView的加载本地数据的三种方式
ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...
- ios网络学习------6 json格式数据的请求处理
ios网络学习------6 json格式数据的请求处理 分类: IOS2014-06-30 20:33 471人阅读 评论(3) 收藏 举报 #import "MainViewContro ...
- iOS 杂笔-21(self.name = “object” 和 _name =”object” 有什么不同?)
iOS 杂笔-21(self.name = "object" 和 _name ="object" 有什么不同?) 问题如题,这是考察对属性与变量的了解而已. s ...
- iOS之学习资源收集--很好的IOS技术学习网站
点击图片也能打开相关的网站: https://boxueio.com/skill/swift http://ios.b2mp.cn/ http://gold.xitu.io/welcome/?utm_ ...
- ios开发之OC基础-ios开发学习路线图
本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...
随机推荐
- jdk1.8源码学习笔记
前言: 前一段时间开始学习了一些基本的数据结构和算法,算是弥补了这方面的知识短板,但是仅仅是对一些算法的了解,目前工作当中也并没有应用到这些,因此希望通过结合实际例子来学习,巩固之前学到的内容,思前想 ...
- String类中的toCharArray()方法
toCharArray()方法 该方法的作用是返回一个字符数组,该字符数组中存放了当前字符串中的所有字符 public class toChar1{ public static void main( ...
- laravel5.5任务调度
目录 1. 定义调度 1.1 使用Closure 1.2 Artisan 命令调度 1.3 队列任务调度 1.4 Shell 命令调度 1.5 调度频率设置 1.6 闭包测试限制 1.7 避免任务重复 ...
- Python 实现MD5加密
from hashlib import md5 def encrypt_md5(s): # 创建md5对象 new_md5 = md5() # 这里必须用encode()函数对字符串进行编码,不然会报 ...
- js 全局变量和局部变量
Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),但是不能对变量定义做提前解析 1.作用域和作用域链 2.变量声明提前
- ironic state information
参考: http://blog.csdn.net/zhonglinzhang/article/details/74202562 http://blog.csdn.net/wanghuiict/arti ...
- python爬取动态网页2,从JavaScript文件读取内容
import requests import json head = {"user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) ...
- jquery实现京东淘宝首页的轮番效果图
主要是绑定事件以及实现自动滚轮 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- 在python中如何比较两个float类型的数据是否相等
奇怪的现象 前几天跟同事聊起来,在计算机内部float比较是很坑爹的事情.比方说,0.1+0.2得到的结果竟然不是0.3? >>> 0.1+0.2 0.300000000000000 ...
- PPC Windows Mobile判断网络(gprs)连接与否代码
转载 在PPC的开发中有时需要判断网络什么时候连接,什么时候断开,并且做出相应的处理.比如说TimeSyncPPC程序,就需要在网络连接之后得到消息然后去下载时间同步信息,因此就必须要一种方法让Tim ...