OC中的KVC和KVO(二)

来源:互联网 发布:ssd nvme ubuntu 分区 编辑:程序博客网 时间:2024/04/30 02:19

观察者模式中的基础包括: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输出函数。

0 0