KVO的簡單認識

KVO

概念

  • KVO - key value observer 鍵值觀察web

  • 監聽對象屬性變化的一種手段,能夠用在開源框架,讓代碼解耦。例如:上拉、下拉刷新控件面試

常見面試題

  • KVO 是同步的仍是異步的?框架

代碼演練

  • 添加觀察異步

// 添加鍵值觀察/**
 1. 調用對象:要監聽的對象

 2. 參數
 1> 觀察者,負責處理監聽事件的對象
 2> 觀察的屬性
 3> 觀察的選項
 4> 上下文
 */[self.person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:@"Person Name"];
  • 監聽方法spa

// NSObject 分類方法,意味着全部的 NSObject 均可以實現這個方法!// 跟協議的方法很像,分類方法又能夠稱爲「隱式代理」!不提倡用,可是要知道概念!// 全部的 kvo 監聽到事件,都會調用此方法/**
 1. 觀察的屬性
 2. 觀察的對象
 3. change 屬性變化字典(新/舊)
 4. 上下文,與監聽的時候傳遞的一致

 能夠利用上下文區分不一樣的監聽!
 */- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {    NSLog(@"睡會 %@", [NSThread currentThread]);

    [NSThread sleepForTimeInterval:1.0];    NSLog(@"%@ %@ %@ %@", keyPath, object, change, context);
}

注意事項

  • 監聽方法執行會在屬性變化所在的線程上執行!線程

  • 若是多個線程同時修改一個屬性,可能會出現資源搶奪的問題代理

  • 若是監聽的屬性多,KVO 的監聽方法會很是難寫code

對象銷燬以前,必定要取消監聽server

相關文章
相關標籤/搜索