iOS中的KVO

KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。这种观察-被观察模型适用于这样的情况,比方说根据A(数据类)的某个属性值变化,B(view类)中的某个属性做出相应变化。对于推崇MVC的cocoa而言,kvo应用的地方非常广泛。(这样的机制听起来类似Notification,但是notification是需要一个发送notification的对象,一般是 notificationCenter,来通知观察者。而kvo是直接通知到观察对象。)


下面是一个非常简单的kvo例子:

#import <Foundation/Foundation.h>
//定义模型类,设置相关的属性
@interface Book : NSObject
@property (nonatomic , copy) NSString *code;
@property (nonatomic , copy) NSString *name;
@property (nonatomic , copy) NSString *price;
@property (nonatomic , copy) NSString *date;

@end

#import "Book.h"

@implementation Book

@end

#import "ViewController.h"
#import "Book.h"
@interface ViewController ()

@end

@implementation ViewController {
    Book *book1;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    //根据之前定义的模型类,实例化一个模型对象,并进行相应初始化设置
    book1 = [[Book alloc]init];
    [book1 setValue:@"0001" forKey:@"code"];
    //为已经实例化的模型类注册一个监听
    [book1 addObserver:self forKeyPath:@"code" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:@"111"];
}

//定义一个可以改变模型类中某些值的操作,如一个按钮点击事件
- (IBAction)BtnClick:(id)sender {
    //改变模型类中的值,并触发KVO的回调方法
    [book1 setValue:@"0002" forKey:@"code"];
}

//当模型类中的值发生改变时,自动调用该方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if([keyPath isEqualToString:@"code"])
    {
        //可以输出旧值和新值,也可以进行其他操作
        NSLog(@"change happen,old:%@ new:%@",[change objectForKey:NSKeyValueChangeOldKey],[change objectForKey:NSKeyValueChangeNewKey]);
        NSLog(@"%@",context);
    }
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

DEMO的下载地址:http://download.csdn.net/detail/u011918080/6986431



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值