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 ...
随机推荐
- TortoiseGit与github实现项目的上传
1. 下载并安装相关软件 这里主要涉及的软件包括msysgit和TortoiseGit. msysgit的下载地址:http://msysgit.googlecode.com/files/Git-1. ...
- MySQL官方.NET Core驱动已出,支持EF Core
千呼万唤始出来MySQL官方.NET Core驱动已出,支持EF Core. 昨天MySQL官方已经发布了.NET Core 驱动,目前还是预览版,不过功能已经可用. NuGet 地址:https:/ ...
- 2014 Visual Studio Contact(); 直播笔记
昨天微软干了几件了不起的事:.NET开发环境将开源.跨平台支持(Mac OS X和Linux).多设备支持(WP.Android和iOS)和Visual Studio免费(Visual Studio ...
- svn迁移到git
步骤命令如下: > git svn clone https://svn-url/ProjectName --no-metadata --authors-file=user.txt --trunk ...
- geotrellis使用(三)geotrellis数据处理过程分析
之前简单介绍了geotrellis的工作过程以及一个简单的demo,最近在此demo的基础上实现了SRTM DEM数据的实时分析以及高程实时处理,下面我就以我实现的上述功能为例,简单介绍一下geotr ...
- HTML基础知识汇总
前言 一直想总结一下,苦于没有时间,正好看到了一个总结了不错的博客,我就在他的基础上进行一下测试并总结,原博地址:http://www.cnblogs.com/wanghzh/p/5805587.ht ...
- [转]Teach Yourself Programming in Ten Years——用十年教会自己编程
作者:Peter Norvig 译者:刘海粟 本文原文为:http://norvig.com/21-days.html 该翻译文档的PDF版可以在这里获得:http://download.csdn.n ...
- [WCF编程]10.操作:流操作
一.流操作概述 在默认情况下,当客户端调用服务时,服务只有在接收到完整的消息后才会被调用,同样,客户端只有在包含了调用结果的返回消息被完整接受时,才会解除对它的阻塞. 对于数据量小的消息,这种交换模式 ...
- 速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait
[源码下载] 速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait 作者:webabcd 介绍速战速决 之 PHP 类基础 抽象类 接口 trait 示例1.类的相关知识点 1(基础 ...
- java Properties异常:Malformed \uxxxx encoding.
昨天项目中遇到一个 java.lang.IllegalArgumentException: Malformed \uxxxx encoding.这样的一个异常,debug了一下发现是读取propert ...