KVC和KVO

ngnmg

KVC底層實(shí)現(xiàn)

  • 當(dāng)一個(gè)對(duì)象調(diào)用setValue方法麸粮,方法內(nèi)部會(huì)做以下操作:
    • 檢查是否存在相應(yīng)key的set方法绘证,如果有就調(diào)用
    • 如果沒有就查看有沒有與key同名并且?guī)聞澗€的屬性撵割,如果有就直接賦值。
    • 如果沒有跑杭,就繼續(xù)查看有沒有與key同名不帶下劃線的屬性铆帽,如果有就直接賦值
    • 如果還是沒有找到,就調(diào)用setValue:forUndefinedKey:方法

KVO底層實(shí)現(xiàn)

  • kvo基于runtime機(jī)制實(shí)現(xiàn)德谅,使用了isa混寫爹橱,當(dāng)一個(gè)對(duì)象(假設(shè)是person對(duì)象,person對(duì)象的類是MYPerson類)的屬性值發(fā)生變化時(shí)窄做,系統(tǒng)會(huì)自動(dòng)產(chǎn)生一個(gè)類繼承自MYPerson:NSKVONotifying_MYPerosn愧驱,在這個(gè)類的setAge方法里面,調(diào)用[super setAge:age] [self willChangeValueForKey:@"age"] 和[self
    didChangeValueForKey:@"age"]椭盏,這兩個(gè)方法會(huì)調(diào)用 automaticallyNotifiesObserversForKey

  • 同時(shí)派生類還重寫了 class 方法以“欺騙”外部調(diào)用者它就是起初的那個(gè)類组砚。然后系統(tǒng)將這個(gè)對(duì)象的 isa 指針指向這個(gè)新誕生的派生類,因此這個(gè)對(duì)象就成為該派生類的對(duì)象了掏颊,因而在該對(duì)象上對(duì) setter 的調(diào)用就會(huì)調(diào)用重寫的 setter糟红,從而激活鍵值通知機(jī)制。此外乌叶,派生類還重寫了 dealloc 方法來釋放資源盆偿。

KVO的優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn)

    • 能夠提供一種簡便的方法來實(shí)現(xiàn)兩個(gè)對(duì)象之間的同步
    • 能夠?qū)Ψ俏覀儎?chuàng)建的對(duì)象,即內(nèi)部對(duì)象的狀態(tài)改變做出響應(yīng)准浴,而且不需要改變內(nèi)部對(duì)象的實(shí)現(xiàn)
    • 能夠提供觀察的屬性的新值以及先前值
  • 缺點(diǎn)

    • 我們觀察的屬性必須使用string來定義陈肛,因此在編譯器不會(huì)出現(xiàn)警告以及檢查
    • 對(duì)屬性進(jìn)行重構(gòu)將會(huì)導(dǎo)致我們的觀察代碼不可再用
    • 當(dāng)釋放觀察者需要移除觀察者
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市兄裂,隨后出現(xiàn)的幾起案子愚隧,更是在濱河造成了極大的恐慌帆离,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異队贱,居然都是意外死亡奏篙,警方通過查閱死者的電腦和手機(jī)囊骤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門馏锡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛆楞,你說我怎么就攤上這事溯乒。” “怎么了豹爹?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵裆悄,是天一觀的道長。 經(jīng)常有香客問我臂聋,道長光稼,這世上最難降的妖魔是什么或南? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮艾君,結(jié)果婚禮上采够,老公的妹妹穿的比我還像新娘。我一直安慰自己冰垄,他們只是感情好蹬癌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虹茶,像睡著了一般冀瓦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上写烤,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音拾徙,去河邊找鬼洲炊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛尼啡,可吹牛的內(nèi)容都是我干的暂衡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼崖瞭,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼狂巢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起书聚,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤唧领,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后雌续,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斩个,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年驯杜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了受啥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鸽心,死狀恐怖滚局,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情顽频,我是刑警寧澤藤肢,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站糯景,受9級(jí)特大地震影響谤草,放射性物質(zhì)發(fā)生泄漏跟束。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一丑孩、第九天 我趴在偏房一處隱蔽的房頂上張望冀宴。 院中可真熱鬧,春花似錦温学、人聲如沸略贮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逃延。三九已至,卻和暖如春轧拄,著一層夾襖步出監(jiān)牢的瞬間揽祥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國打工檩电, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拄丰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓俐末,卻偏偏與公主長得像料按,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卓箫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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

  • 在編程中载矿,最常見的就是程序的流程取決于你所使用的各種變量和屬性的值,根據(jù)變量和屬性的值確定后面運(yùn)行的代碼烹卒,有時(shí)會(huì)檢...
    pro648閱讀 1,642評(píng)論 2 27
  • 目錄:1.KVC用法闷盔;2.KVC和對(duì)象的setter、getter方法的區(qū)別旅急;3.key和keyPath的區(qū)別馁筐;4...
    倫倫子_f7b3閱讀 574評(píng)論 0 1
  • KVC:鍵-值編碼,使用字符串直接訪問對(duì)象的屬性坠非。 KVO:鍵值觀察機(jī)制敏沉,它提供了觀察某一屬性變化的方法 KVC底...
    司夜閱讀 189評(píng)論 0 0
  • 關(guān)于KVC KVC是什么? Key-Value Coding炎码,即鍵值編碼盟迟。它是一種不通過存取方法,而通過屬性名稱字...
    Wang66閱讀 12,503評(píng)論 4 38
  • 參考鏈接:[精辟]KVO 和 KVC 的區(qū)別和用法潦闲,干貨T懿ぁ!歉闰!iOS開發(fā)技巧系列---詳解KVCKVC的優(yōu)點(diǎn)和缺點(diǎn)...
    大布溜閱讀 206評(píng)論 0 1