首页 > 代码库 > KVO的简单用法

KVO的简单用法

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