OC KVC
OC KVC
KVC 全称 key valued coding 键值编码
在说KVC之前应该简单的了解一下反射机制
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法.
对于任意一个对象,都能够调用它的任意一个方法和属性.
JAVA,C#都有这个机制.
ObjC也有,所以你根部不必进行任何操作就可以进行属性的动态读写,那就是KVC.
KVC的操作方法由NSKeyValueCoding提供,而他是NSObject的类别,也就是说ObjC中几乎所有的对象都支持KVC操作.
常用方法
获取值的方法
- valueForKey:,传入NSString属性的名字.
- valueForKeyPath:,传入NSString属性的路径.xx.xx形式.
- valueForUndefinedKey:,它的默认实现是抛出异常,可以重写这个函数做错误处理.
修改值的方法
- setValue:forKey:
- setValue:forKeyPath:
- setValue:forUndefinedKey:
setValue:forKey的搜索过程:
- 首先搜索的是@property自动生成的setter方法.格式为(set).
- 如果没有搜索到将会搜索程序员手写的setter方法.手写setter的方法原因可能是@synthsize的使用;也可能是没有使用@property自动合成属性,只是声明了成员变量然后手写setter.
- 当没有找到任何setter的方法之后,如果类方法accessInstanceVariablesDirectly返回YES(注:这是NSKeyValueCodingCatogery中实现的类方法,默认实现为返回YES)那么按_,_is,,is的顺序搜索成员名.
- 如果还是没有找到设置成员的值,就会调用setValue:forUndefinedKey:.
- 如果没有重写setValue:forUndefinedKey程序会马上崩溃.
注意
1、使用KVC间接修改对象属性时,系统会自动判断对象属性的类型,并完成转换.
2、KVC可以访问成员变量,无论是否提供getter/setter方法,无论可见性是怎样,是否有readonly修饰.
KVC主要应用
setValue:forUndefinedKey与valueForUndefinedKey的应用
KVC的主要用途是将dictionary转换成model,但有些服务器返回的字段有可能是oc的关键字比如 ‘id’ , ’description’等.我们无法让@property后面key值为id,于是使用大写的ID代替,KVC是区分大小写的我们不用担心。这时我们只需在setValue:forUndefinedKey:把id的key值赋值给ID的key值,就可以避免关键字的尴尬。
dict<->model互转
字典转模型
[self setValuesForKeysWithDictionary:dict];
模型转字典
[p dictionaryWithValuesForKeys:array];
KVC集合
NSArray/NSSet等都支持KVC.
[array valueForKeyPath:@"dog.name"];
使用KVC计算属性
格式为:[p valueForKeyPath:@"Left keypath部分.@Collectionoperator部分.Right keypath部分”];
Left keypath部分:需要操作对象路径。
Collectionoperator部分:通过@符号确定使用的集合操作。
Right keypath部分:需要进行集合操作的属性。
举例:[p valueForKeyPath:@"books.@sum.price"];
@avg:平均值
@count:总数
@max:最大
@min:最小
@sum:总数
OC KVC的更多相关文章
- OC KVC总结
在iOS开发中,我们一般使用set方法或者点语法来修改对象的属性值,比如说 stu.age = 9 与 [stu setAge:9]. KVC(key value coding)键值编码,这是一种间接 ...
- oc kvc的模式:匹配搜索模式(模式匹配)、装包解包
按照一定规则使用匹配模式在目标空间进行搜索,然后执行相应操作: 运行时系统将kvc的运行机制解释为模式匹配,将值的兼容性问题解释为装包解包问题 一.模式匹配 The default implement ...
- iOS 头条一面 面试题
1.如何高效的切圆角? 切圆角共有以下三种方案: cornerRadius + masksToBounds:适用于单个视图或视图不在列表上且量级较小的情况,会导致离屏渲染. CAShapeLayer+ ...
- OC:属性、点语法、KVC
//属性的属性 属性定义在一个 .h文件里,在这个.h文件里可以定义实例变量(就是这个类的特征),也可以通过 @protery(属性约束关键字) 属性名字类型 属性名 来定义一些属性,在prope ...
- KVC 和 OC字典
KVC(键值编码)和OC 字典很相似,都是键值存储.但是OC 字典比较灵活,它是一种映射. [dict setObject:<#(id)#> forKey:<#(id<NSCo ...
- QF——OC中的KVC,KVO
KVC: (Key Value Coding) 键值编码 所谓KVC,其实就是不通过set和get方法访问对象属性,而是通过属性名字符串动态的去读取属性.KVC其实也是OC反射机制的一种运用. 之所以 ...
- 设计模式之观察者模式(关于OC中的KVO\KVC\NSNotification)
学习了这么久的设计模式方面的知识,最大的感触就是,设计模式不能脱离语言特性.近段时间所看的两本书籍,<大话设计模式>里面的代码是C#写的,有一些设计模式实现起来也是采用了C#的语言特性(C ...
- OC学习篇之---KVC和KVO操作
前一篇文章我们介绍了OC中最常用的文件操作:http://blog.csdn.net/jiangwei0910410003/article/details/41875015,那么今天来看一下OC中的一 ...
- [转] iOS (OC) 中 KVC 与 KVO 理解
转自: http://magicalboy.com/kvc_and_kvo/ KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解. Key-Value ...
随机推荐
- ASP.NET Core的配置(4):多样性的配置来源[中篇]
我们在本篇文章中会介绍三种针对物理文件的ConfiguationProvider,它们分别是针对JSON文件的JsonConfiguationProvider,针对XML文件的XmlConfiguat ...
- ListView+CheckBox实现全选 单击效果
在网上也找了一些案例,但都是用Map来实现的.我的是把对象绑定到当前控件上.代码稍微简洁. main布局文件:main.xml <?xml version="1.0" enc ...
- jsonp跨域+ashx(示例)
前言 做B/S项目的时候,我们一般使用jquery+ashx来实现异步的一些操作,比如后台获取一些数据到前台,但是如果ashx文件不在本项目下,引用的是别的域下的文件,这时候就访问不了.关于jsonp ...
- 关于近段时间论坛型APP 的一段舍弃
一直以为缓存务必要做的很好,好到什么程度呢,我曾这样想,用户在下滑数刷新的时候也要做到,先加载久缓存再加载新的,同时只改变旧的某些项.这样的想法真的很好!好到我花费了三天去设计数据库和服务器的 php ...
- Win8.1安装mysql-installer-community-5.6.21.0.mis
引言 我本机是win8.1,在官网下载的这个安装是32位和64位都能装,安装步骤参考:http://jingyan.baidu.com/article/67662997305dcd54d51b84d4 ...
- 局部打印插件 jquery.PrintArea.js
(function ($) { var printAreaCount = 0; $.fn.printArea = function () { var ele = $(this); var idPref ...
- PHP连接SQL Server相关配置及说明
关于php怎么连接数据库,大家肯定有不同的看法,有的用wamp,有的用xamp,他们都是集成环境,方便操作.但有时,数据库的类型不同,要连接不同的数据库.今天和大家分享一下如何连接sql2000,服 ...
- Circuit Breaker Pattern(断路器模式)
Handle faults that may take a variable amount of time to rectify when connecting to a remote service ...
- 由面试引发的思考:B/S与C/S究竟是何物
一.现状说明: 就在这金三银四的求职黄金时期,我有幸作为公司的独立技术面试官,拥有最终决定录用权,在倍受上级领导的充分信任下,我也向上级保证,一定要为公司找到合适的人才,就在我满怀信心的情况下面试了一 ...
- 初入网络系列笔记(1)TCP/IP基础
一.借鉴说明,本博文借鉴以下博文 1.BlueTzar,TCP/IP四层模型, http://www.cnblogs.com/BlueTzar/articles/811160.html 2.叶剑峰,漫 ...