KVC和KVO的區(qū)別

(1)KVC:鍵-值編碼是一種間接訪問對(duì)象的屬性,使用字符串來標(biāo)識(shí)屬性,而不是通過調(diào)用存取方法,直接或通過實(shí)例變量訪問的機(jī)制爽茴。很多情況下可以簡(jiǎn)化程序代碼。

(2)KVO:鍵-值觀察機(jī)制绰垂,他提供了觀察某一屬性變化的方法闹啦,極大地簡(jiǎn)化了代碼。

比如對(duì)按鈕點(diǎn)擊變化狀態(tài)的監(jiān)控

[self addObserve:self forKeyPath:@"highlighted" option:0 context:nil];

#pragma mark KVO

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

      if ([keyPath isEqualToString:@"highlighted"] {

            [self setNeedsDisplay];

      }

}

對(duì)于系統(tǒng)是根據(jù)keyPath去取得相應(yīng)的值發(fā)生改變辕坝,理論上來說是和KVC機(jī)制的道理是一樣的。

(3)KVC機(jī)制如何通過key尋找到value:

“當(dāng)通過KVC調(diào)用對(duì)象時(shí)荐健,比如:[self valueForKey:@"someKey"]時(shí)酱畅,程序會(huì)自動(dòng)試圖通過集中不同的方式解析這個(gè)調(diào)用琳袄。首先查找對(duì)象是否帶有someKey這個(gè)方法,如果沒找到纺酸,會(huì)繼續(xù)查找對(duì)象是否帶有someKey這個(gè)實(shí)例變量(IVar)窖逗,如果還沒有找到,程序會(huì)繼續(xù)試圖調(diào)用- (id)valueForUndefinedKey:這個(gè)方法餐蔬。如果這個(gè)方法還是沒有被實(shí)現(xiàn)的話碎紊,程序會(huì)拋出一個(gè)NSUndefinedKeyException異常錯(cuò)誤。

(cocoachina.com注:Key-Value Coding查找方法的時(shí)候樊诺,不僅僅會(huì)查找someKey這個(gè)方法仗考,還會(huì)查找getSomeKey這個(gè)方法,前面加一個(gè)get词爬,或者_(dá)someKey以及_getSomeKey這幾種形式秃嗜。同時(shí),查找實(shí)例變量的時(shí)候也會(huì)不僅僅查找someKey這個(gè)變量顿膨,也會(huì)查找_someKey這個(gè)變量是否存在锅锨。)

設(shè)計(jì)valueForUndefinedKey:方法的主要目的是當(dāng)你使用- (id)valueForKey方法從對(duì)象中請(qǐng)求值時(shí),對(duì)象能夠在錯(cuò)誤發(fā)生前恋沃,有最后的機(jī)會(huì)響應(yīng)這個(gè)請(qǐng)求必搞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市囊咏,隨后出現(xiàn)的幾起案子恕洲,更是在濱河造成了極大的恐慌,老刑警劉巖匆笤,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件研侣,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡炮捧,警方通過查閱死者的電腦和手機(jī)庶诡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咆课,“玉大人末誓,你說我怎么就攤上這事∈轵剑” “怎么了喇澡?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)殊校。 經(jīng)常有香客問我晴玖,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任呕屎,我火速辦了婚禮让簿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘秀睛。我一直安慰自己尔当,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布蹂安。 她就那樣靜靜地躺著椭迎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪田盈。 梳的紋絲不亂的頭發(fā)上畜号,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音缠黍,去河邊找鬼弄兜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瓷式,可吹牛的內(nèi)容都是我干的替饿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼贸典,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼视卢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起廊驼,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤据过,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后妒挎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绳锅,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年酝掩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鳞芙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡期虾,死狀恐怖原朝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情镶苞,我是刑警寧澤喳坠,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站茂蚓,受9級(jí)特大地震影響壕鹉,放射性物質(zhì)發(fā)生泄漏剃幌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一御板、第九天 我趴在偏房一處隱蔽的房頂上張望锥忿。 院中可真熱鬧,春花似錦怠肋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至础芍,卻和暖如春杈抢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仑性。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工惶楼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诊杆。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓歼捐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親晨汹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子豹储,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容