[ios开发基础之]KVO的使用

本文来源:http://www.wuleilei.com/blog/332

一、概述

KVO,即:Key Value Observing,直译为:基于键值的观察者。

它提供一种机制,当指定的对象的属性被修改后,对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者。

在下文的示例中。图书(Book类),就是个实体。它的属性有书名(name)和价格(price)。那么,在界面开发中,可能有多个视图和这个实体有关联。如果实体(Book)的价格(price)发生了变化,这些关联的界面都要被修改。

二、使用方法

系统框架已经支持KVO,所以程序员在使用的时候非常简单。

1. 注册,指定被观察者的属性;

2. 实现回调方法;

3. 移除观察。

三、实例

假设有一个Book类,此类有name和price属性,当price发生变化时,界面上的价格立刻显示为最新的价格。

1. Book类,头文件:

#import <Foundation/Foundation.h>

@interface Book : NSObject {
    NSString *name;
    float price;
}

@end

Book类的实现文件,没做任何事情,不贴了。

2. 在viewController里面实例化它,监听它的属性,并在label中显示它的属性。

_book = [[Book alloc] init];
[_book setValue:@"C语言" forKey:@"name"];
[_book setValue:@"10.0" forKey:@"price"];
[_book addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];

3. 点击button的时候,更改book的price属性。

- (IBAction)changePrice:(id)sender
{
    [_book setValue:@"12.1" forKey:@"price"];
}

4. 实现回调方法。

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"price"]) {
        NSLog(@"%@", change);
    }
}

5. 增加观察与取消观察是成对出现的,所以在book释放前,要删除观察者。

- (void)dealloc
{
    [_book removeObserver:self forKeyPath:@"price"];
    [_book release];
    [super dealloc];
}

点击此处下载示例。

你可能感兴趣的:([ios开发基础之]KVO的使用)