IOS中KVC与KVO的应用解析
同样的,对于用@property声明的变量,使用kvc的效果和使用点语法,setter,getter方法的效果是一样的。
通过上面的例子,我们已经可以简单了解KVC是干什么的了,下面是一些常用方法。
+ (BOOL)accessInstanceVariablesDirectly;
这个方法类似一个开关,默认返回为YES,表示支持KVC方式赋值,也可以在子类中将其重写,如果返回为NO,则再进行KVC会抛出异常。
- (id)valueForKey:(NSString *)key;
通过键取值
- (void)setValue:(id)value forKey:(NSString *)key;
通过字符串键给成员变量赋值
- (BOOL)validateValue:(inout id *)ioValue forKey:(NSString *)inKey error:(out NSError **)outError;
系统默认实现的方法,验证一个键值是否有效
- (NSMutableArray *)mutableArrayValueForKey:(NSString *)key;
将取到的值放入一个可变数组中
- (NSMutableOrderedSet *)mutableOrderedSetValueForKey:(NSString *)key NS_AVAILABLE(10_7, 5_0);
将取到的值放入可变的有序集合中
- (NSMutableSet *)mutableSetValueForKey:(NSString *)key;
将取到的值放入可变的集合中
- (id)valueForKeyPath:(NSString *)keyPath;
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
上面这两个方法分别是通过路径赋值与取值,数据结构类似地图,比如在model类中有一个成员变量model2,在Model2类中有一个字符串,我们可以通过如下的方式赋值取值
- (NSMutableArray *)mutableArrayValueForKeyPath:(NSString *)keyPath;
- (NSMutableOrderedSet *)mutableOrderedSetValueForKeyPath:(NSString *)keyPath NS_AVAILABLE(10_7, 5_0);
- (NSMutableSet *)mutableSetValueForKeyPath:(NSString *)keyPath;
上面三个方法与前面类似,只是是从路径取值的。
- (id)valueForUndefinedKey:(NSString *)key;
这个方法可以获取没有提前定义的成员变量的值,比如运行时创建的,下面这个方法是给未定义的成员变量赋值
- (void)setValue:(id)value forUndefinedKey:(NSString *)key;
注意:这两个方法默认的实现会抛出异常,子类必须重写才能使用。
- (void)setNilValueForKey:(NSString *)key;
将成员变量置为nil
- (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;
根据键值获取键值对字典
- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues;
通过字典对成员变量同意赋值,经常使用
二、NSKeyValueObservingCustomization(KVO)
KVO是一种消息监听机制,可以在某个量发生变化的时候将消息传送给监听者,因此广泛用于传值,界面低耦合等逻辑中。KVO机制的核心是以下三个方法:
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;
使用这个方法注册一个监听者,参数解释如下:
observer:监听者对象
keyPath:监听的参数
options:监听选项
context:参数传递
监听的选项枚举如下:
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath context:(void *)context ;
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;
这两个方法都是用来移除监听者
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
这个方法是监听对象数据改变时回调的方法,change是一个字典,字典中根据监听的选项不同,存放不同的值(新或者旧)。context是传递的参数。
代码示例:
[model addObserver:self forKeyPath:@"str" options:NSKeyValueObservingOptionNew context:@"321"];
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
iOS探索 -- KVO 的原理分析 KVO (key-value-observing) 是一种 键值观察 机制, 它允许当前对象去观察目标对象的某个属性的变化; 当被观察对象的属性发生变化后, 会通过特定方法通知观察者对象属性变化的一些情况内容, 观察者对象拿到变化情况后做出相关操作。
iOS开发:KVC与KVO KVC 就是键值编码(key-value-coding),可以直接访问对象的属性,或者给对象的属性赋值。黑魔法之一,很多高级的iOS开发技巧都是基于KVC实现的。 KVO 是键值观察者(key-value-observing)。实现方式:通过对某个对象的某个属性添加观察者,当该属性改变,就会调用”observeValueForKeyPath:”方法,为我们提供一个“对象值改变了!”的时机进行一些操作。
IOS开发-KVO 观察者,观察对象属性的变化,当被观察者该属性发生变化时,观察者会接收到通知,可以在回调函数中做相应的处理
相关文章
- Flex AIR应用换肤功能(Android和IOS)
- [ IOS ] iOS-控制器View的创建和生命周期
- iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)
- iOS开发UI篇—ios应用数据存储方式(归档)
- iOS中alloc与init
- IOS中使用像素位图(CGImageRef)对图片进行处理
- 《iPhone与iPad开发实战—iOS经典应用剖析》连载五
- iOS文本布局探讨之三——使用TextKit框架进行富文本布局
- IOS之Block的应用-textFeild的回调应用
- 在Windows笔记本上调试运行在iOS设备上的前端应用
- ios swift5 tableView禁止滚动 tableView的高度等于内容(所有cell)的高度
- iOS 弱引用管理
- iOS音视频开发十一:音视频解封装模块,从 MP4 到 MP4
- ios inHouse 公布应用
- iOS抽屉效果
- IOS基于新浪微博开放平台微博APP