kvo深入浅出举例

it2024-07-15  70

一,概述

  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]; }

转载于:https://www.cnblogs.com/lishanshan/p/4878216.html

最新回复(0)