KVC和KVO的基礎使用方法
首先,KVC(Key Value Coding)就是由NSKeyValueCoding協議提供,而NSObject方法中也實現了這個方法,所以說KVC可以在任何頁面調用。
那么KVO(Key Value Observer)呢,就是監制監聽,說白了就是看著Model中的哪一個值改變了,然后執行監聽方法。
所以我對KVC的理解就是動態的為Model賦值和取值,KVO就是看著KVC,如果使用KVC改變了Model的值,那么就調用監聽方法。
好了不多說了,直接上代碼,實現原理后續繼續寫。
首先創建一個Person類,類中有一個name屬性,personMessage是它下一層的Model
-(void)setValue:(id)value forUndefinedKey:(NSString *)key;
這個方法的作用是當取值時,沒有找到你寫的key值得時候,調用此方法
作用就是防止key值寫錯導致程序崩潰
Person.m中實現一下
創建PersonMessage類,類中有兩個屬性,sex、age
同理在PersonMessage.m中
然后在ViewController中使用KVC和KVO
使用KVC進行賦值的三種方式
使用KVC進行取值的三種方式
打印信息如下
以上是KVC的取值和賦值,接下來簡述KVO監聽的方法
首先創建一個監聽者
person:調用的model
addObserver:觀察者 ?self(用本類調用)
forKeyPath:要監聽的屬性名
options:觀察屬性的新值,舊值等的一些配置(枚舉值)
context:上下文 可以為KVO的回調方法傳值
options的枚舉值有四個
NSKeyValueObservingOptionOld 把更改之前的值提供給處理方法
NSKeyValueObservingOptionNew 把更改之后的值提供給處理方法
NSKeyValueObservingOptionInitial 把初始化的值提供給處理方法,一旦注冊,立馬就會調用一次。通常它會帶有新值,而不會帶有舊值。
NSKeyValueObservingOptionPrior 分2次調用。在值改變之前和值改變之后。
實現回調方法(當被監聽的對象的值發生變化時回調此方法)
監聽者移除之后就完成此次監聽
以上就是KVO的基本用法
注意:
使用步驟:
1、注冊觀察者(為被觀察這指定觀察者以及被觀察者屬性)
2、實現回調方法
3、觸發回調方法
4、移除觀察者
一般KVO的崩潰原因如下
1、被觀察的對象銷毀掉了(被觀察的對象是一個局部變量)
2、觀察者被釋放掉了,但是沒有移除監聽(如模態推出,push,pop等)
3、注冊的監聽沒有移除掉,又重新注冊了一遍監聽
謝謝大家的支持,有什么問題請在下面留言。