一,概述

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

最新文章

  1. java中易遗忘的知识,不定时更新……
  2. 给你的应用“一只”智慧的眼睛 —— Barcode常识普及以及识别信息处理
  3. MyBatis学习总结(七)——Mybatis缓存(转载)
  4. 本地json文件的编辑器,node-webkit开发的exe程序
  5. attilax.java 注解的本质and 使用最佳实践(3)O7
  6. SnapKit代码约束
  7. 使用mysqlbinlog server远程备份binlog的脚本
  8. B - Plane of Tanks: Pro
  9. [Objective-c 基础 - 2.4] 多态
  10. [置顶] ios 在一定选项范围随机选取选项demo
  11. thinkphp中的钩子_什么是钩子?
  12. 面向对象_new,__eq__,__hash__
  13. codeforces 735C Tennis Championship(贪心+递推)
  14. 《Linux内核设计与实现》第十八章读书笔记
  15. Curator之Recipes之锁
  16. 转:前端js、jQuery实现日期格式化、字符串格式化
  17. day40 python MySQL【四】 之 【索引】【视图】【触发器】【存储过程】【函数】
  18. 简单说说SpringMVC
  19. 2016-2017-2 20155325实验二《Java面向对象程序设计》实验报告
  20. [iOS微博项目 - 4.0] - 自定义微博cell

热门文章

  1. 查看linux内存、cpu
  2. 【响应式Web设计实践 #BOOK#】
  3. 【转】Linux命令之查看文件占用空间大小-du,df
  4. [QT]Qt+VS2012+Win8 64Bit安装
  5. Unity Fresnel Hero(Dota2) Shader
  6. leetcode https://oj.leetcode.com/problems/jump-game-ii/
  7. GPG error: the public key is not available
  8. 关键字 final
  9. 开源跨平台的3D渲染软件
  10. Java 内存泄露的理解与解决过程