您的位置:首页 > 其它

OC中的KVC和KVO(二)

2016-08-15 23:09 411 查看
观察者模式中的基础包括:KVC以及KVO

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输出函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: