程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> OC的KVO模式漫談

OC的KVO模式漫談

編輯:C++入門知識

Key-Value Observing (簡寫為KVO):當指定的對象的屬性被修改了,允許對象接受到通知的機制。每次指定的被觀察對象的屬性被修改的時候,KVO都會自動的去通知相應的觀察者。        因為KVO模式本身獲得了框架級別的支持,所以開發人員不需要自己設計觀察者模式,不用添加額外的代碼,使用方便。       KVO模式的工作原理:        如果A對象希望在B對象的一個特定屬性改變時,獲得通知消息,就需要使用 addObserver:forKeyPath:options:context進行注冊。       addObserver:forKeyPath:options:context:”方法在指定對象實例之間建立了一個連接。這個連接不是兩個類之間建立的,而是兩個對象實例之間建立的連接。       同時,為了能夠響應消息,對象A必須實現“observeValueForKeyPath:ofObject:change:context:”方法。這個方法實現如何響應變化的消息。在這個方法裡面我們可以跟自己的情況,去實現應對被觀察對象屬性變動的相應邏輯。      這樣當對象B的特定屬性改變時,就會回調對象A中observeValueForKeyPath:ofObject:change:context方法裡面的邏輯, 實現了KVO模式過程。       示例代碼如下:          [cpp]  - (void)viewDidLoad   {       [super viewDidLoad];              _label = [[UILabel alloc] initWithFrame:CGRectMake(20, 50, 50, 30)];              _label.textAlignment = NSTextAlignmentCenter;       _label.font = [UIFont systemFontOfSize:20];              [self.view addSubview:_label];              [self addObserver:self forKeyPath:@"textvalue" options:0 context:nil];  //注冊          [self setValue:[NSNumber numberWithInt:2] forKey:@"textvalue"];   }      // 監聽回調   - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context   {       if ([keyPath isEqualToString:@"textvalue"]){                      NSNumber* num = [self valueForKey:@"textvalue"];                      _label.text = [NSString stringWithFormat:@"%d",[num integerValue]];                           }   }   shent 
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved