KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。
//KVO是基于KVC的,观察者可以观察一个对象的某个属性(key),但这个属性的值(value)发生变化的时候,会触发一个事件
//KVO中涉及到以下几个概念
//被观察者 通常是 Model
//观察者 通常是 Controller
//key 被观察者的某个属性
//value key对应的值
//设计模式中有一种设计模式 :观察者模式
//KVO是观察者模式的一种实现方式,属于观察者设计模式
//******KVO的使用流程
//1.创建被观察对象
//2.为被观察者指定观察者
//3.实现 回调方法
//4.修改 被观察的属性(会触发 回调方法)
//5.移除观察者
实例:
创建一个Person类 ,Person类有一个name属性
根控制器ViewController.m中代码
#import "ViewController.h" #import "Person.h" @interface ViewController () { Person *_p; } @end @implementation ViewController -(void)dealloc { [_p removeObserver:self forKeyPath:@"name"]; [_p release]; [super dealloc]; } - (void)viewDidLoad { [super viewDidLoad]; //p用作被观察者 _p = [[Person alloc] init]; [_p addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:@"hello"]; _p.name = @"lisi"; // Do any additional setup after loading the view, typically from a nib. } //被观察者的属性发生变化时,才会触发此方法 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { NSLog(@"object = %@",object); NSLog(@"keyPath = %@",keyPath); NSLog(@"change = %@",change); NSLog(@"context = %@",context); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
原文:http://www.cnblogs.com/limicheng/p/3892852.html