KVC与KVO理解
来源:互联网 发布:数据库索引怎么建立 编辑:程序博客网 时间:2024/05/29 09:42
Key-Value Coding(KVC)
KVC,是指 NSKeyValueCoding,NSObject 的分类, NSObject(NSKeyValueCoding) ,提供一种机制来间接访问对象的属性和值。KVO是基于KVC实现的关键技术之一。
例如:一个Person对象有一个name和一个age属性,一个book对象,
Person *p = [[Personalloc] init];
p.name =@"Jack";
p.age =10;
Book *book=[[Bookalloc] init];
book.name=@"倾城之恋";
p.book=book;
NSString *presonName=[p valueForKeyPath:@"name"];
NSLog(@"presonName-----%@",presonName);
打印如下:
presonName-----Jack
NSString *bookName=[[pvalueForKey:@"book"]valueForKey:@"name"];等价于
NSString *presonName=[p valueForKeyPath:@"book.name"];
NSLog(@"bookName-----%@",bookName);
打印如下:
bookName-----倾城之恋
注意:key和key path的区别,key可以从一个对象获取值,而 key path 可以将多个key用点号“.”分开Key-Value Observing (KVO)
Key-Value Observing (KVO)建立在kvc之上,它能够观察一个对象key path值得改变
例如:
- (void)viewDidLoad
{
[superviewDidLoad];
HMPerson *p = [[HMPersonalloc] init];
p.age =20;
//实现观察
[p addObserver:selfforKeyPath:@"age"options:NSKeyValueObservingOptionOld |NSKeyValueObservingOptionNew context:nil];
//改变值
p.age =30;
self.p = p;
}
//停止观察
- (void)dealloc
{
[self.premoveObserver:selfforKeyPath:@"age"];
}
/**
* 当监控的某个属性的值改变了就会调用
*
* @param keyPath属性名(哪个属性改了?)
* @param object 哪个对象的属性被改了?
* @param change 属性的修改情况(属性原来的值、属性最新的值)
* @param context void * == id
*/
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"%@对象的%@属性改变了:%@", object, keyPath, change);
}
打印如下:
<HMPerson: 0x7fac02ce0d20>对象的age属性改变了:{
kind = 1;
new = 30;
old = 20;
}
- 理解KVC与KVO
- KVC 与 KVO 理解
- KVC 与 KVO 理解
- KVC 与 KVO 理解
- KVC 与 KVO 理解
- KVC 与 KVO 理解
- KVC 与 KVO 理解
- KVC 与 KVO 理解
- KVC与KVO理解
- KVC 与 KVO 理解
- KVC 与 KVO 理解
- KVC 与 KVO 理解
- KVC 与 KVO 理解
- KVC 与 KVO 理解
- KVC 与 KVO 理解
- KVC 与 KVO 理解
- KVC 与 KVO 理解
- KVC与KVO理解
- Maven setting.xml配置详细说明
- imageloader+scaleimageview+viewpager组合异步加载图片的图片浏览功能
- 第一章 认识ArcGIS
- xmpp开发入门
- March of the Penguins - UVa 12125 网络流
- KVC与KVO理解
- Android取消EditText自带黄色边框
- [leetcode]Find Minimum in Rotated Sorted Array
- [iOS]判断字符串是否为合法邮箱地址
- GraphMatrix::构造、析构、插入、删除
- android模仿Twitter记住密码功能
- GitHubs
- android WebView使用 一 (简单使用在程序中)
- 关于LR录制时不能自动启动IE浏览器的解决方法总结