KVO和KVC理解

?一、KVO(Key-Value-Observing)

鍵值觀察者模式,說白了就是當(dāng)你監(jiān)聽的值發(fā)生變化時(shí),會收到對應(yīng)的通知。


一般分為三步:

注冊監(jiān)聽

使用方法:

1.添加KVO監(jiān)聽者

**@paramobserver 觀察者(監(jiān)聽器)

*@paramkeyPath? 屬性名(要觀察的屬性)

*@paramoptions

*@paramcontext? 傳遞的參數(shù)*/

- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void*)context;

例子:

//為對象p添加一個觀察者(監(jiān)聽器)[p addObserver: self ?forKeyPath:@"name" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:@"test"];

2.設(shè)置監(jiān)聽事件

/** *? 當(dāng)利用KVO監(jiān)聽到某個對象的屬性值發(fā)生了改變,就會自動調(diào)用這個

?* *@paramkeyPath 哪個屬性被改了?

*@paramobject? 哪個對象的屬性被改了?

*@paramchange? 改成咋樣

?*@paramcontext 當(dāng)初addObserver時(shí)的context參數(shù)值?*/

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context{? ?

?NSLog(@"%@ %@ %@ %@", object, keyPath, change, context);

}

3.取消監(jiān)聽

//釋放KVO監(jiān)聽

-(void)dealloc{? ??

[p removeObserver: self forKeyPath:@"test"];

}


二、KVC(Key-Value-Coding)

鍵值編碼模式,說白了就是通過指定的key獲得想要的值value,而不是通過調(diào)用Setter、Getter方法訪問。


1 .訪問私有變量

一個類中的私有變量,不能直接通過Setter、Getter方法訪問。但是卻可以通過KVC來訪問。

2. 使用KVC直接訪問 NSArray 或者 NSSet 的屬性值

3. 使用KVC將字典(json)轉(zhuǎn)化成模型


注意:

(1). key的值必須正確,如果拼寫錯誤,會出現(xiàn)異常

(2). 當(dāng)key的值是沒有定義的,valueForUndefinedKey:這個方法會被調(diào)用,如果你自己寫了這個方法,key的值出錯就會調(diào)用到這里來

(3). 因?yàn)轭恔ey反復(fù)嵌套,所以有個keyPath的概念,keyPath就是用.號來把一個一個key鏈接起來,這樣就可以根據(jù)這個路徑訪問下去

(4). NSArray/NSSet等都支持KVC

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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