kvc 與 kvo

1.KVO KVC 沒聯(lián)系

2.KVO 是監(jiān)聽屬性值的改變

3.KVO 底層實(shí)現(xiàn)原理是系統(tǒng)給當(dāng)前類創(chuàng)建子類 , 在子類 setter 方法調(diào)用父類的 setter 方法

1.kvc ? 原理, 運(yùn)行時(shí)------>遍歷----找到屬性(key)賦值

.可以訪問私有成員變量的值

2.可以間接修改私有成員變量的值(替換系統(tǒng)自帶的導(dǎo)航欄、tabbar)

舉個(gè)例子:我現(xiàn)在要替換系統(tǒng)自帶的tabbar,但是,系統(tǒng)的是“ readonly”的。解決方法是:KVC。

賦值原理:

(1)去模型中查找有沒有setIcon方法,就直接調(diào)用這個(gè)set方法,給模型這個(gè)屬性賦值[self setIcon:dict[@"icon"]];

(2)如果找不到set方法,接著就會(huì)去尋找有沒有icon屬性,如果有,就直接訪問模型中icon = dict[@"icon"];

(3)如果找不到icon屬性,接著又會(huì)去尋找_icon屬性,如果有,直接_icon = dict[@"icon"];

(4)如果都找不到就會(huì)報(bào)錯(cuò)

[ setValue:forUndefinedKey:]

用處:修改pageControl圖片

UIPageControl *pageControl = [[UIPageControl alloc] init];

[pageControl setValue:[UIImage imageNamed:@"home_slipt_nor"] forKeyPath:@"_pageImage"];

[pageControl setValue:[UIImage imageNamed:@"home_slipt_pre"] forKeyPath:@"_currentPageImage"];

2.kvo

//注意 KeyPath 與 Key 雖然都是通過鍵去找值但 KeyPath 會(huì)自動(dòng)尋址

//比如說我 height 屬性里還有一個(gè)"躺下的高度"或"站著的高度"(哈哈還 ?太污了)

//通過 KeyPath 就會(huì)層層深入找到 ?Key 就只能找 height 這一層

//NSKeyValueObservingOptionOld 屬性的舊值

//NSKeyValueObservingOptionNew 屬性的新值

//context 攜帶的參數(shù)

[person addObserver:self forKeyPath:@"height" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];

//我要改值了

person.height = 181;

}

//keyPath

//object 被修改屬性的類的對(duì)象

//change 返回改變前后的屬性與屬性值(字典)

//context 攜帶的參數(shù)

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

NSLog(@"%@",change);

}

kvo觸發(fā)

自動(dòng)觸發(fā)的場(chǎng)景:在注冊(cè)KVO之前設(shè)置一個(gè)初始值,注冊(cè)之后,設(shè)置一個(gè)不一樣的值,就可以觸發(fā)了

手動(dòng)觸發(fā)演示

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

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

  • kvc簡(jiǎn)述 kvc即鍵值編碼,在iOS中的應(yīng)用主要體現(xiàn)在開發(fā)者通過key訪問對(duì)象的屬性或給對(duì)象的屬性賦值。這樣做最...
    RunnerFL閱讀 549評(píng)論 0 0
  • KVC、KVO概述 KVC(NSKeyValueCoding) "鍵-值 編碼"是一種間接訪問對(duì)象的屬性的機(jī)制...
    Joker_King閱讀 1,113評(píng)論 1 4
  • KVC 什么是 KVC KVC 是 Key-Value-Coding 的簡(jiǎn)稱。 KVC 是一種可以直接通過字符串的...
    LeeJay閱讀 2,268評(píng)論 6 41
  • KVC 與 KVO 是 Objective C 的關(guān)鍵概念,個(gè)人認(rèn)為必須理解的東西,下面是實(shí)例講解。 Key-Va...
    韓七夏閱讀 275評(píng)論 0 1
  • 王先生,我們認(rèn)識(shí)好多年了,只是我們沒有陪在彼此身邊也好多年了。你還好嗎?肯定還是一如既往的帥氣,不對(duì),我想應(yīng)該是更...
    李家小胖紙閱讀 3,425評(píng)論 4 10

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