OC中的KVC和KVO(二)
2016-08-15 23:09
411 查看
观察者模式中的基础包括:KVC以及KVO
KVO的由来:
在编码的过程中,经常需要判断目标是否发生变化,以便及时地做出对应的处理。此时,苹果公司就提供了一种策略,即‘OC运行时’提供了‘KVO’技术。其中‘KVO’时基于KVC实现的。
KVO的实现包括:注册成为观察者、观察者定义KVO回调、移除观察者。
1.注册观察者(定义一个Hero类)
addObserver:表示接受通知的对象,即观察者,通常为self;
forKeyPath:键路径参数,要观察的键路径;
options:表示KVO希望变化如何传递给观察者,这些值可以使用“|”进行多选;
context:上下文内存区通常为nil。
2.定义KVO回调
3.移除观察者
主函数里面的实现
当_HP的值改变时,将会在控制台输出改变后的值,而在整个程序中,只有在Observer.m文件中设置了NSLog输出函数。
KVO的由来:
在编码的过程中,经常需要判断目标是否发生变化,以便及时地做出对应的处理。此时,苹果公司就提供了一种策略,即‘OC运行时’提供了‘KVO’技术。其中‘KVO’时基于KVC实现的。
KVO的实现包括:注册成为观察者、观察者定义KVO回调、移除观察者。
1.注册观察者(定义一个Hero类)
//Observer -(id)initWithHero:(Hero *)hero{ if(self = [super init]){ self.hero = hero; [self.hero addObserver:self forKeyPath:@"_HP" options:NSKeyValueObserverOptionNew context:nil]; } return self; }
addObserver:表示接受通知的对象,即观察者,通常为self;
forKeyPath:键路径参数,要观察的键路径;
options:表示KVO希望变化如何传递给观察者,这些值可以使用“|”进行多选;
context:上下文内存区通常为nil。
2.定义KVO回调
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{ //输出改变后的值 NSLog(@"%@",[change objectForKey:NSKeyValueChangeNewKey]); }
3.移除观察者
-(void)dealloc{ [self.hero removeObserver:self forKeyPath:@"_HP"]; }
主函数里面的实现
//使用KVC进行设值 [hero setValue:@100 forKey:@"_HP"]; //初始化hero观察者 Observer *ober = [[Observer alloc] initWithHero:hero];
当_HP的值改变时,将会在控制台输出改变后的值,而在整个程序中,只有在Observer.m文件中设置了NSLog输出函数。
相关文章推荐
- OC之KVC、KVO 学习
- OC的KVC和KVO机制
- OC语法之KVC与KVO
- OC&nbsp;之&nbsp;KVO、KVC、通知(笔记)
- oc语言第九课 KVC、KVO与谓词——ios学习连载14
- OC中的KVC和KVO
- OC学习总结之KVC KVO 通知
- OC语法之KVC与KVO
- OC中的KVC和KVO
- OC-KVC/KVO
- OC学习篇之---KVC和KVO操作
- iOS OC KVC KVO 实现原理详解
- 设计模式之观察者模式(关于OC中的KVO\KVC\NSNotification)
- OC基础之KVC,KVO
- OC--KVC、KVO
- OC学习篇之---KVC和KVO操作
- 设计模式之观察者模式(关于OC中的KVO\KVC\NSNotification)
- IOS开发-OC学习-kvc,kvo
- 【OC语言连载十】KVC、KVO、谓词
- OC高级语法之KVC和KVO的学习