KVO的概述與使用

  • iOS:KVO的概述與使用

一,概述

  • KVO,即:Key-Value Observing,它提供一種機(jī)制,當(dāng)指定的對(duì)象的屬性被修改后,則對(duì)象就會(huì)接受到通知。簡(jiǎn)單的說(shuō)就是每次指定的被觀察的對(duì)象的屬性被修改后,KVO就會(huì)自動(dòng)通知相應(yīng)的觀察者了。

二,使用方法

  • 系統(tǒng)框架已經(jīng)支持KVO,所以程序員在使用的時(shí)候非常簡(jiǎn)單。
  1. 注冊(cè),指定被觀察者的屬性,
  2. 實(shí)現(xiàn)回調(diào)方法
  3. 移除觀察

三,實(shí)例:

  • 假設(shè)一個(gè)場(chǎng)景,股票的價(jià)格顯示在當(dāng)前屏幕上,當(dāng)股票價(jià)格更改的時(shí)候,實(shí)時(shí)顯示更新其價(jià)格。
  • 1.定義DataModel,
@interface StockData : NSObject {  
    NSString * stockName;  
    float price;  
}  
@end  
@implementation StockData  
@end  

  //2.定義此model為Controller的屬性,實(shí)例化它,監(jiān)聽(tīng)它的屬性,并顯示在當(dāng)前的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 =[NSString stringWithFormat:@"%@",[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.當(dāng)點(diǎn)擊button的時(shí)候,調(diào)用buttonAction方法,修改對(duì)象的屬性

-(void) buttonAction  
{  
    [stockForKVO setValue:@"20.0" forKey:@"price"];  
}  

  //4. 實(shí)現(xiàn)回調(diào)方法

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context  
{  
    if([keyPath isEqualToString:@"price"])  
    { 
        myLabel.text =[NSString stringWithFormat:@"%@",[stockForKVO valueForKey:@"price"]] ;  
    }  
}  

  //5.增加觀察與取消觀察是成對(duì)出現(xiàn)的,所以需要在最后的時(shí)候,移除觀察者

- (void)dealloc  
{  
    [super dealloc];  
    [stockForKVO removeObserver:self forKeyPath:@"price"];  
    [stockForKVO release];  
}  

四,小結(jié)

  • KVO這種編碼方式使用起來(lái)很簡(jiǎn)單,很適用與datamodel修改后,引發(fā)的UIVIew的變化這種情況,就像上邊的例子那樣,當(dāng)更改屬性的值后,監(jiān)聽(tīng)對(duì)象會(huì)立即得到通知。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一,概述 KVO,即:Key-Value Observing,它提供一種機(jī)制,當(dāng)指定的對(duì)象的屬性被修改后,則對(duì)象就...
    李sir35閱讀 253評(píng)論 0 0
  • 一、概述 KVO,即:Key-Value Observing,它提供一種機(jī)制,當(dāng)指定的對(duì)象的屬性被修改后,則對(duì)象就...
    JaneYang1205閱讀 487評(píng)論 0 1
  • 一,概述 KVO,即:Key-Value Observing,它提供一種機(jī)制,當(dāng)指定的對(duì)象的屬性被修改后,則對(duì)象就...
    匠金科技閱讀 202評(píng)論 0 0
  • 簡(jiǎn)單介紹 KVO(Key-Value Observing)鍵值觀察,它提供一種機(jī)制,當(dāng)指定的對(duì)象的屬性被修改后,則...
    公子無(wú)禮閱讀 205評(píng)論 0 0
  • 今天終于開(kāi)始寫(xiě)我的第一個(gè)簡(jiǎn)書(shū),哈哈,目前自己iOS開(kāi)發(fā)也兩年了,也是時(shí)候分享一下經(jīng)驗(yàn)了。好吧,廢話不多說(shuō),開(kāi)始第一...
    游子_IT閱讀 552評(píng)論 4 1

友情鏈接更多精彩內(nèi)容