【iOS Tips】005-什么是KVO、KVC?
2018-07-26 15:46
846 查看
1.KVC-Key Value Coding-键值编码
KVC是cocoa的一个标准组成部分,它能让我们可以通过Key的方式访问属性, 不必调用明确的property accssor。
KVC几个使用场景:
1、通过Key/KeyPath获取值。
valueForKey只能获取键对应的值。而valueForKeyPath还可以传递关系。如上代码所示我们可以通过name.lowercaseString直接获取到name小写字符串。
又比如vc中有一个people对象,people对象有一个age属性。我们可以直接通过以下代码访问age属性:
2、通过Key/KeyPath设置值:
3、通过字典映射设置模型的值:
不过使用时需要注意,当属性中没有对应的key时,系统会抛出异常。这时我们需要在该类中实现以下方法:
a.给对象的属性添加观察者
b.监听属性
c.移除观察者
KVC是cocoa的一个标准组成部分,它能让我们可以通过Key的方式访问属性, 不必调用明确的property accssor。
KVC几个使用场景:
1、通过Key/KeyPath获取值。
ViewController *vc = [[ViewController alloc]init]; [vc valueForKey:@"name"]; [vc valueForKeyPath:@"name.lowercaseString"];
valueForKey只能获取键对应的值。而valueForKeyPath还可以传递关系。如上代码所示我们可以通过name.lowercaseString直接获取到name小写字符串。
又比如vc中有一个people对象,people对象有一个age属性。我们可以直接通过以下代码访问age属性:
[vc valueForKeyPath:@"people.age"]
2、通过Key/KeyPath设置值:
[vc setValue:@"xiaoming" forKey:@"name"]; [vc setValue:[People new] forKeyPath:@"people"]; [vc setValue:@"@16" forKeyPath:@"people.age"];
3、通过字典映射设置模型的值:
NSDictionary *dict = @{@"age":@18}; People *people = [[People alloc]init]; [people setValuesForKeysWithDictionary:dict];
不过使用时需要注意,当属性中没有对应的key时,系统会抛出异常。这时我们需要在该类中实现以下方法:
#import "People.h" @implementation People - (void)setValue:(id)value forUndefinedKey:(NSString *)key{ //处理未定义的key } @end
2.KVO-Key-Value-Observing-键值观察者。
KVO提供了一种观察者的机制,通过对某个对象的某个属性添加观察者,当该属性改变,就会调用"observeValueForKeyPath:"方法,告诉我们这个属性变化了。a.给对象的属性添加观察者
//KVC [_people addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew context:nil];
b.监听属性
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{ if ([keyPath isEqualToString:@"age"]) { NSLog(@"object %@ 的 age 变为 %@",object,_people.age); } }
c.移除观察者
[_people removeObserver:self forKeyPath:@"age"];
相关文章推荐
- iOS开发之KVC/KVO
- 转载大神IOS开发系列【6】--Objective-C之KVC、KVO
- ios KVO&KVC
- iOS KVC/KVO/KVB
- iOS 理解KVO与KVC
- iOS KVC & KVO
- iOS KVO & KVC
- iOS开发系列--Objective-C之KVC、KVO
- 【iOS开发系列】KVC&KVO
- iOS KVO & KVC
- IOS 之 KVC & KVO
- iOS开发系列--Objective-C之KVC、KVO
- iOS开发中的KVC 和 KVO
- iOS&nbsp;KVC和KVO开发模式
- iOS开发中KVO & KVC的使用
- IOS-KVC/KVO
- iOS KVC/KVO总结
- iOS:KVO/KVC 的概述与使用
- iOS之KVC、KVO、Delegate、NSNotification区别
- iOS KVC & KVO