kvo深入浅出举例

时间:2022-04-26
本文章向大家介绍kvo深入浅出举例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一,概述

KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。

二,使用方法

系统框架已经支持KVO,所以程序员在使用的时候非常简单。

1. 注册,指定被观察者的属性   

2. 实现回调方法 谁是观察者 这个回调方法就写在哪

3. 移除观察  最好在dealloc中写

三,实例:

假设一个场景,股票的价格显示在当前屏幕上,当股票价格更改的时候,实时显示更新其价格。

添加两个实体类 一个是股票Strock 一个是person

Strock.h
@interface Strock : NSObject
 {
     NSString *_name;
     float _price;
 }
@end
Strock.m
-(NSString *)description
 {
     return [NSString stringWithFormat:@"name:%@,price:%f",_name,_price];
}
person.m
//回调方法
 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
 {
     NSLog(@"keyPath:%@,object:%@,change:%@",keyPath,object,change);
}
viewController.m
   self.person = [[Person alloc]init];
     self.strock = [[Strock alloc]init];
 
     //给属性赋值
     [self.strock setValue:@"baidu" forKey:@"_name"];
     [self.strock setValue:@155 forKey:@"_price"];
 
     //设置person为观察者
     [self.strock addObserver:self.person forKeyPath:@"_price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
 
 }
//拖进来一个点击 事件  当button点击的时候
 - (IBAction)priceClicked:(UIButton *)sender {
     NSInteger price = [[self.strock valueForKey:@"_price"]floatValue];
 
     [self.strock setValue:@(price+1) forKey:@"_price"];
 }
//移除观察者
 -(void)dealloc
 {
     [self.strock removeObserver:self.person forKeyPath:@"_price" context:nil];
}