您的位置:首页 > 其它

KVO的概述与使用

2013-08-08 16:53 204 查看
一、概述

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];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: