您的位置:首页 > 移动开发 > IOS开发

[ios基础] KVO观察者模式,实用分析

2015-11-28 14:34 459 查看
KVO:Key - Value - Observer

全名:观察者模式

它是一个基于KVC的事件回调方式;

KVC和KVO不是同一个层次的东西,因为他们的目的不一样,所以面试官问起他们的区别,只需要回答压根就没有什么可比较的,因为实现的目的就不一样。

KVO是指添加一个第三方观察者,去坚挺一个key的value是否有变化,当key的value变化后,就会执行一个方法中的代码。

KVO大量消耗系统资源,如果你想在事件回调中使用kvo,可以参考网上“事件回调”相关文章

使用方法:

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

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

- (void)viewDidLoad

{

[super viewDidLoad];

stockForKVO = [[StockData alloc] init];

[stockForKVO setValue:@"searph" forKey:@"stockName"];

[stockForKVO setValue:@"10.0" forKey:@"price"];

[stockForKVO addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];

myLabel = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 30 )];

myLabel.textColor = [UIColor redColor];

myLabel.text = [stockForKVO valueForKey:@"price"];

[self.view addSubview:myLabel];

UIButton * b = [UIButton buttonWithType:UIButtonTypeRoundedRect];

b.frame = CGRectMake(0, 0, 100, 30);

[b addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:b];

}

2.实现回调方法法,重写方法:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

{

if([keyPath isEqualToString:@"price"])

{

myLabel.text = [stockForKVO valueForKey:@"price"];

}

}

3.移除观察

- (void)dealloc

{

[super dealloc];

[stockForKVO removeObserver:self forKeyPath:@"price"];

[stockForKVO release];

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