KVO 的概述与使用
Posted 知吾猪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KVO 的概述与使用相关的知识,希望对你有一定的参考价值。
参考:http://blog.csdn.net/yuquan0821/article/details/6646400/
一,概述
KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。
二,使用方法
系统框架已经支持KVO,所以程序员在使用的时候非常简单。
1. 注册,指定被观察者的属性,
2. 实现回调方法
3. 移除观察(ARC不需要)
三,实例:
当对象的一个属性变化时,会在屏幕上显示出来
如下面的的money字段
@interface Model : NSObject
@property (nonatomic,assign)int money;
@end
注册观察者
[_myModel addObserver:self forKeyPath:@"money" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
回调实现
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
_moneyShow.text = [[NSString alloc]initWithFormat:@"%d",_myModel.money ];
}
完整代码
#import "ViewController.h" @interface Model : NSObject @property (nonatomic,assign)int money; @end @interface ViewController () { UILabel *_moneyShow; Model *_myModel; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _moneyShow = [[UILabel alloc]initWithFrame:CGRectMake(300, 100, 100, 100)]; _moneyShow.backgroundColor = [UIColor blueColor]; [self.view addSubview:_moneyShow]; _myModel = [[Model alloc]init]; _myModel.money = 100; // kvo [_myModel addObserver:self forKeyPath:@"money" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL]; UIButton *btn = [[UIButton alloc]init]; btn.frame = CGRectMake(100, 100, 100, 100); [btn setTitle:@"加钱" forState:UIControlStateNormal]; btn.backgroundColor = [UIColor redColor]; [btn addTarget:self action:@selector(addMoney) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn]; } -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { _moneyShow.text = [[NSString alloc]initWithFormat:@"%d",_myModel.money ]; } - (void)addMoney { _myModel.money += 100; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
以上是关于KVO 的概述与使用的主要内容,如果未能解决你的问题,请参考以下文章