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

 

你可能感兴趣的:(简单用法)