KVC&&&KVO
KVC
什么是KVC --->What
KVC指的就是NSKeyValueCoding非正式协议。
KVC是一种间接地访问对象的属性的机制。
这种间接表现在通过字符串来标识属性,而不是通过调用存取方法或直接地访问实例变量的方式。
KVC机制不仅支持对象,还支持标量和结构体类型,这些非对象的类型会被自动的装箱和开箱。
Key & Key Path
键(Key)是一个字符串用来标识对象里面的一个指定的属性。一般一个键对应对象的存取方法或实例变量。键必须是ASCII码,一般以小写字母开始,不能包含空格。
A key path is a string of dot separated keys that is used to specify a sequence of object properties to traverse. The property of the first key in the sequence is relative to the receiver, and each subsequent key is evaluated relative to the value of the previous property.
键路径(Key Path)是一个由点进行分割的一系列键组成的字符串
KVC的使用
- (void)setValue:(id)value forKey:(NSString *)key
- (id)valueForKey:(NSString *)key
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath
- (id)valueForKeyPath:(NSString *)keyPath
- (id)valueForUndefinedKey:(NSString *)key
- (void)setNilValueForKey:(NSString *)key
DEMO
注意:
- KVC与点语法是正交的,也就是一点关系都没有
- The accessor patterns are written in the form -set<Key>: or -<key>
KVC在集合中的使用
@avg
NSNumber *transactionAverage = [transactions valueForKeyPath:@"@avg.amount"];
@count
NSNumber *numberOfTransactions = [transactions valueForKeyPath:@"@count"];
@max
NSDate *latestDate = [transactions valueForKeyPath:@"@max.date"];
@min
NSDate *earliestDate = [transactions valueForKeyPath:@"@min.date"];
@sum
NSNumber *amountSum = [transactions valueForKeyPath:@"@sum.amount"];
什么是KVO
键值观察(Key-value observing)是一种机制。这种机制允许当一个对象的某些属性的值被修改后会通知另外观察该变化的对象。常用于MVC中Model与Controller之间的通信。
如何使用KVO
- 注册,指定被观察者的属性
- 实现回调方法
- 移除观察
常用方法及数据类型说明
// 添加监听对象,并指指定监听的keyPath,以及监听哪些值的变化
- (void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context
options参数:
NSKeyValueObservingOptions 说明你要监听什么样的变化:
NSKeyValueObservingOptionNew 属性变化的时候, 只会通知新的值
NSKeyValueObservingOptionOld 属性变化的时候,只会通知旧的数据值
NSKeyValueObservingOptionInitial 当调用添加监听的方法时候,回调方法立即调用,通知初始值
NSKeyValueObservingOptionPrior 取代单次通知,在值变化前和变化后都会调用,比如设置old后,不单单只通知一次, 变化前后会通知两次。
// 移除指定键路径的观察者对象
- (void)removeObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath
// 当监听的属性发生变化后会调用此方法,根据监听option的设置,change的值会存储对应的值
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
注意:必须用set方法, 或者KVC的方法修改属性的值,才会引起KVO通知
For detail, see Introduction to Key-Value Observing Programming Guide
Demo
KVC&&&KVO的更多相关文章
- KVC/KVO原理详解及编程指南
一.简介 1.KVC简介 2.KVO简介 二.KVC相关技术 1.Key和Key Path 2.点语法和KVC 3.一对多关系(To-Many)中的集合访问器方法 4.键值验证(Key-Value V ...
- 【转】 KVC/KVO原理详解及编程指南
原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的 ...
- kvc/kvo复习
kvc/kvo复习 1 小问题 '[<XMGPerson 0x7fb8a8f30220> setValue:forUndefinedKey:]: this XMGPerson * pers ...
- 转:KVC/KVO原理详解及编程指南
作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或 ...
- 阶段性总结⓵触摸事件&手势识别⓶Quartz2D绘图⓷CALayer图层⓸CAAnimation⓹UIDynamic UI动力学⓺KVC&KVO
知识点复习 1. 触摸事件&手势识别 1> 4个触摸事件,针对视图的 2> 6个手势识别(除了用代码添加,也可以用Storyboard添加) 附加在某一个特定视图上的, ...
- IOS开发之KVC KVO KVB
KVC(Key Value Coding) KVO(Key Value Observing) KVB(Key Value Binding) KVO是Cocoa的一个重要机制,他提供了观察某一属性变化的 ...
- KVC & KVO
KVC和KVO看上去又是两个挺牛的单词简写,KVC是Key-Value Coding的简写,是键值编码的意思.KVO是Key-Value Observing的简写,是键值观察的意思.那么我们能拿KV ...
- 04 KVC|KVO|Delegate|NSNotification区别
一. iOS 中KVC.KVO.NSNotification.delegate 在实际的编程中运用的非常多,掌握好他们的运行原理和使用场合对于我们程序的开发将会带来事办工倍的效果: 二. KVC ...
- 深入理解 KVC\KVO 实现机制 — KVC
KVC和KVO都属于键值编程而且底层实现机制都是isa-swizzing,所以本来想放在一起讲的.但是篇幅有限所以就分成了两篇博文 KVO实现机制传送门 KVC概述 KVC是Key Value Cod ...
随机推荐
- Cmd Markdown编辑器简明语法手册
标签: Cmd-Markdown 1. 斜体和粗体 使用 * 和 ** 表示斜体和粗体. 示例: 这是 斜体,这是 粗体. 2. 分级标题 使用 === 表示一级标题,使用 --- 表示二级标题. 示 ...
- iOS开发之使用XMPPFramework实现即时通信(二)
上篇的博客iOS开发之使用XMPPFramework实现即时通信(一)只是本篇的引子,本篇博客就给之前的微信加上即时通讯的功能,主要是对XMPPFramework的使用.本篇博客中用到了Spark做测 ...
- Matrix Factorization SVD 矩阵分解
Today we have learned the Matrix Factorization, and I want to record my study notes. Some kownledge ...
- L2/L3/L4 Switch简介
第二层交换机,是根据第二层数据链路层的MAC地址和通过站表选择路由来完成端到端的数据交换的.因为站表的建立与维护是由交换机自动完成,而路由器又是属于第三层设备,其寻址过程是根据IP地址寻址和通过路由表 ...
- VS2013预览版安装 体验截图
支持与msdn帐号链接: 不一样的团队管理: 新建项目:
- 实用的60个CSS代码片段
1.垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,可以很优雅的解决这个困惑: .verticalcenter{ position: re ...
- Ionic2学习笔记(8):Local Storage& SQLite
作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5557947.html Ionic2可以有两种方式来存储数据,Local S ...
- AngularJS中的方法参数的问题
在使用AngularJS开发的过程中出现了如下的问题,一次贴记录下. 感觉也不能说是AngularJS的语法,应该说是JS里面的处理流程应该就是这样子,我现在想通过前端页面传递值到后端(通过方法传递) ...
- C#判断字符串是否是数字
/// <summary> /// 判断字符串是否是数字 /// </summary> public static bool IsNumber(string s) { if ( ...
- 面积(area)
题目描述 编程计算由"*"号围成的下列图形的面积.面积计算方法是统计*号所围成的闭合曲线中点的数目.如图所示,在10*10的二维数组中,“*”围住了15个点,因此面积为15. 0 ...