1、KVC簡介
全稱是Key-value coding,翻譯成鍵值編碼。顧名思義,在某種程度上跟map的關係匪淺。它提供了一種使用字符串而不是訪問器方法去訪問一個對象實例變量的機制。
KVC的用法: 簡單來說就是給對象的私有屬性賦值.
常用到兩個方法:
// 層級結構較淺時使用
- (id)valueForKey:(NSString *)key;
- (void)setValue:(id)value forKey:(NSString *)key;
// 層級結構較深時使用
- (id)valueForKeyPath:(NSString *)keyPath;
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
應用: 更改系統控件的一些私有屬性, 點語法無法獲取, 採用KVC解決了我們的難題.
2、KVO簡介
全稱是Key-value observing,翻譯成鍵值觀察。提供了一種當其它對象屬性被修改的時候能通知當前對象的機制。KVO機制適合實現model和controller類之間的通訊。
KVO的用法: 簡單來說就是動態監聽屬性變化.
常用到的方法:
// 添加監聽者
- (void)addObserver:(id)object
forKeyPath:(NSString *)keyPath
options:(NSKeyValueObservingOptions)options
context:(void *)context;
// 監聽方法, 所有KVO統一調用這個方法, 最好判斷對象類型
// 使用[object isKindOfClass: []]進行判斷
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context;
// 記得在dealloc方法中移除監聽
- (void)removeObserver:(NSObject *)observer
forKeyPath:(NSString *)keyPath;
應用:
圖片/視頻下載時監聽進度, 製作進度條;
界面下拉刷新.