iOS:KVO的概述與使用
阿新 • • 發佈:2019-01-29
一,概述
KVO,即:Key-Value Observing,它提供一種機制,當指定的物件的屬性被修改後,則物件就會接受到通知。簡單的說就是每次指定的被觀察的物件的屬性被修改後,KVO就會自動通知相應的觀察者了。
二,使用方法
系統框架已經支援KVO,所以程式設計師在使用的時候非常簡單。
1. 註冊,指定被觀察者的屬性,
2. 實現回撥方法
3. 移除觀察
三,例項:
假設一個場景,股票的價格顯示在當前螢幕上,當股票價格更改的時候,實時顯示更新其價格。
1.定義DataModel,
@interface StockData : NSObject { NSString * stockName; float price; } @end @implementation StockData @end
2.定義此model為Controller的屬性,例項化它,監聽它的屬性,並顯示在當前的View裡邊
- (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]; }
3.當點選button的時候,呼叫buttonAction方法,修改物件的屬性
-(void) buttonAction
{
[stockForKVO setValue:@"20.0" forKey:@"price"];
}
4. 實現回撥方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if([keyPath isEqualToString:@"price"]) { myLabel.text = [stockForKVO valueForKey:@"price"]; } }
5.增加觀察與取消觀察是成對出現的,所以需要在最後的時候,移除觀察者
- (void)dealloc
{
[super dealloc];
[stockForKVO removeObserver:self forKeyPath:@"price"];
[stockForKVO release];
}