KVC 和 KVO 简单总结
KVC:
key value coding,键值编码.是一种通过使用属性的名称(key)来间接访问对象属性的方法.这个方法可以不用通过 setter/getter 方法来访问对象的属性.该方法使用的实质是,是使用 valueForKey来代替 getter 方法, setValueForKey 来代替 setter 方法.
KVC 常用的方法:
- (id)ValueForKey: 通过 key 值读取对象的属性
-(id)setValue: forKey: 通过 key 的值来使用属性
-(id)setNilValueForKey: 将给的 key 字对应的 value 值设置为 nil
-(id)setValueForUndefinedKey: 错误拦截,在 KVC 没有找到 key 值时调用.
KVC 的特点:
- 既可以取值也可以赋值.
- KVC 是一种间接传值,该方式有利于解耦合.
- KVC 可以对只读属性/私有属性赋值
- KVC 有自动装箱(自动类型转换)的功能.
- 支持键值路径
键值路径:说白了就是对嵌套比较深的key 取值.主要表现在两个方法之间的区别setValue: forKey: 和 setValue: forKeyPath:
setValue: forKey: 方法,在使用的时候只是在本层中查找 key 值进行赋
setValue: forKeyPath: 方法在使用的时候,根据传进来的 key 值在整个项目中查找.直到查找到该 key 值后对其赋值.
- KVC提供了avg,sum,max,min,count 等函数,在可以直接使用
KVC 的缺点
- 由于 KVC 是通过 key 字符串进行属性的访问的,所以编译器无法检测说给的 key 值的正确性
- KVC 的执行效率要比 setter 和 getter 方法的低,因为 KVC 要先解析说给的 key 值,然后才去访问对应的属性.
KVC 的实现原理:
KVC 首先根据传入的 anyKey(以此 key 为例)值去查找对象中是否含有anyKey的方法,找到了就直接使用,如果没有找到就继续查找是否含有anyKey的属性,找到的话直接使用,如果没有找到,则试图调用 setValueForUndefineKey,如果该方法没有实现,则会报错.
注: KVC 查找anyKey的方法和属性的时候,不仅仅查找anyKey,还会查找 _anyKey , getAnyKey 和 _getAnyKey
KVO:
Key value observing,键值监听,通俗点说就是当指定的对象的属性改变的时候,对象就会接到通知.也就是说,每次指定的对象发生改变的时候,对应的监听者就会接收到信息.
KVO 的使用原理:
KVO:键值监听.是 cocoa 框架实现的观察者模式,一般和 KVC 搭配使用.通过 KVO 可以监测一个值的变化.是一个一对多的关系,即一个值发生了变化,会通知所有的观察者.
KVO 的使用方法:
- 注册
- 使用回调方法.
- 移除观察者
KVC 和 KVO 简单总结的更多相关文章
- iOS - 详细理解KVC与KVO
详细理解KVC与KVO 在面试的时候,KVC与KVO有些时候还是会问到的,并且他们都是Objective C的关键概念,在这里我们先做一个简单地介绍: (一)KVC: KVC即指:NSKeyValue ...
- 07OC之KVC、KVO
在OC中,有着很多动态的特性,今天我们着重讲讲OC中的键值编码(KVC)和键值监听(KVO)特性. 一.键值编码(KVC) 在C#中,我们可以通过反射的方式动态去读写一个对象,有时候很方便,因为可以利 ...
- 聊聊 KVC 和 KVO 的高阶应用
KVC, KVO 作为一种魔法贯穿日常Cocoa开发,笔者原先是准备写一篇对其的全面总结,可网络上对其的表面介绍已经够多了,除去基本层面的使用,笔者跟大家谈下平常在网络上没有提及的KVC, KVO进阶 ...
- KVC和KVO
OC中的一个比较有特色的知识点:KVC和KVO 一.KVC操作OC中的KVC操作就和Java中使用反射机制去访问类的private权限的变量,很暴力的,这样做就会破坏类的封装性,本来类中的的priva ...
- [原创]obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用
原文链接:obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用 我们在第16和第17篇中分别介绍了obj-c的KVC与KVO特性,当时举的例子比较fun,太抽象,貌似和实际不沾边哦.那么 ...
- iOS开发中KVC、KVO简介
在iOS开发中,KVC和KVO是经常被用到的.可以使用KVC对对象的属性赋值和取得对象的属性值,可以使用KVO监听对象属性值的变化.简单介绍一下KVC和KVO. 一:键值编码(KVC) KVC,全称 ...
- obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用
我们在第16和第17篇中分别介绍了obj-c的KVC与KVO特性,当时举的例子比较fun,太抽象,貌似和实际不沾边哦.那么下面我们就用一个实际中的例子来看看KVC与KVO是如何运用的吧. 该例中用到了 ...
- iOS开发-KVC和KVO的理解
KVC和KVO看起来很专业,其实用起来还是比较简单的,KVC(Key-value coding)可以理解为键值对编码,如果对象的基本类型,那么键值对编码实际上和get,set方法没有区别,如果是属性是 ...
- iOS:KVC和KVO
来源: 对月流 链接:http://www.jianshu.com/p/f1393d10109d 写在前面: 关于KVC和KVO各种博客多了去了,重新整理下,就当是温习一下吧,也还算是个新手,不对的 ...
随机推荐
- HDU1151Air Raid(二分图的最大匹配)
题目大意: 有一个城镇,它的所有街道都是单行的,并且每条街道都是和两个路口相连.同时已知街道不会形成回路. 你的任务是编写程序求最小数量的伞兵,这些伞兵可以访问(visit)所有的路口.
- UVa 11536 Smallest Sub-Array (水题, 滑动窗口)
题意:给定 n 个由0~m-1的整数组成的序列,输入 k ,问你找出连续的最短序列,使得这个序列含有1-k的所有整数. 析:这个题,很简单么,只要从头开始扫一遍就OK,时间复杂度为O(n). 代码如下 ...
- static和extern的区别
extern(外部) 1.对函数 完整的定义一个外部函数(可以省略extern) 完整的声明一个外部函数(可以省略extern) 2.对变量 只能声明一个外部变量(不能省 ...
- hdoj 5335 Walk Out
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5335 #include<stdio.h> #include<cstring> ...
- ELF学习--可执行文件
承接上一篇.我们来看看可执行文件和重定位文件的不同点. readelf -h test 相比较重定位文件,可执行文件的ELF header中入口地址是0x8048320.而且除了section hea ...
- Merge into 使用
在进行SQL语句编写时,我们经常会遇到这样的问题:当存在记录时,就更新(Update),不存在数据时,就插入(Insert),oracle为我们提供了一种解决方法——Merge into ,具体语法如 ...
- plsql配置连接远程数据库
一.首先安装PL/SQL Developer 下载地址:https://yunpan.cn/cM3njKpfK8MnT 访问密码 996a 二.再安装instantclient_11_2 下载地址:h ...
- Eclipse配置PyDev插件
安装python解释器 安装PyDev: 首先需要去Eclipse官网下载:http://www.eclipse.org/,Eclipse需要JDK支持,如果Eclipse无法正常运行,请到Java官 ...
- 编写高效的Android代码
编写高效的Android代码 毫无疑问,基于Android平台的设备一定是嵌入式设备.现代的手持设备不仅仅是一部电话那么简单,它还是一个小型的手持电脑,但是,即使是最快的最高端的手持设备也远远比不上一 ...
- JavaScript宝座:七大框架论剑
JavaScript宝座:七大框架论剑 一周前,Throne of JS大会在多伦多召开,这应该是我参加过的最有料也最不一样的一次大会.大会官网如是说: 加载整个页面,然后再“渐进增强”以添加动态行为 ...