你的KVO用對(duì)了嗎?(轉(zhuǎn))

前言

KVO對(duì)于每一名iOS開(kāi)發(fā)者而言基协,想必再熟悉不過(guò)了歌亲。你一定能熟練的寫(xiě)出KVO的日常三連:addObserverobserveValueForKeyPath澜驮、removeObserver陷揪。可是,你真的了解KVO嗎悍缠?例如:KVO的底層是如何實(shí)現(xiàn)的卦绣?使用KVO有哪些風(fēng)險(xiǎn)?KVOController又是什么飞蚓?KVOController解決了原生KVO的哪些問(wèn)題滤港,又帶來(lái)了怎樣的風(fēng)險(xiǎn)?

接下來(lái)趴拧,我們不妨代入到具體的場(chǎng)景來(lái)看問(wèn)題:

場(chǎng)景一:Person使用KVO觀察Stock的屬性price溅漾。(Stock的實(shí)例對(duì)象由Person初始化,并被Person對(duì)象強(qiáng)持有)

image

下面這些問(wèn)題著榴,你能快速準(zhǔn)確的得出答案嗎添履?

  1. 如果使用KVC修改price屬性的值,Person可以觀察到price的變化嗎脑又?

  2. 如果price屬性是在Stock的分類(lèi)Stock+Balance中聲明的暮胧,Person可以觀察到price的變化嗎?

  3. 如果price不是Stock的一個(gè)屬性问麸,只是Stock中一個(gè)被聲明成Public的變量往衷,Person可以觀察到price的變化嗎?

  4. 添加觀察后严卖,對(duì)象stock的類(lèi)還是Stock嗎席舍?

  5. 當(dāng)price發(fā)生變化時(shí),消息是如何通知給Person的妄田?

另外:

  1. KVO在iOS10及以下會(huì)出現(xiàn)哪些崩潰俺亮?分別是如何觸發(fā)的?

  2. KVO在iOS11以以上還會(huì)出現(xiàn)上述6中的這些崩潰嗎疟呐?

  3. KVOController會(huì)出現(xiàn)上述的崩潰嗎脚曾?它都做了哪些優(yōu)化?

  4. KVOController又有哪些坑启具?

如果你能快速準(zhǔn)確的回答出上面的9個(gè)問(wèn)題本讥,那么恭喜你,你已經(jīng)對(duì)KVO了如指掌鲁冯,這篇文章并不是為你準(zhǔn)備的拷沸。但是如果你對(duì)于其中的部分問(wèn)題心存疑惑,那么不妨帶著問(wèn)題閱讀完下面的內(nèi)容薯演,相信你一定可以找到答案撞芍!

本文分別從KVO的使用、實(shí)現(xiàn)原理和隱患三方面來(lái)展開(kāi)跨扮,并在介紹完原生KVO的基礎(chǔ)上序无,從源碼實(shí)現(xiàn)的角度验毡,介紹開(kāi)源庫(kù)KVOController是如何解決原生隱患的,以及其不完美之處帝嗡。最后結(jié)合日常開(kāi)發(fā)中可能出現(xiàn)的實(shí)際情況晶通,介紹了該如何安全的使用KVOController。

原文地址 → 你的KVO用對(duì)了嗎
閱讀全文

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哟玷,一起剝皮案震驚了整個(gè)濱河市狮辽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巢寡,老刑警劉巖喉脖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異抑月,居然都是意外死亡动看,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)爪幻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人须误,你說(shuō)我怎么就攤上這事挨稿。” “怎么了京痢?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵奶甘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我祭椰,道長(zhǎng)臭家,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任方淤,我火速辦了婚禮钉赁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘携茂。我一直安慰自己你踩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布讳苦。 她就那樣靜靜地躺著带膜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸳谜。 梳的紋絲不亂的頭發(fā)上膝藕,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音咐扭,去河邊找鬼芭挽。 笑死滑废,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的览绿。 我是一名探鬼主播策严,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼饿敲!你這毒婦竟也來(lái)了妻导?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤怀各,失蹤者是張志新(化名)和其女友劉穎倔韭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瓢对,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寿酌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了硕蛹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片醇疼。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖法焰,靈堂內(nèi)的尸體忽然破棺而出秧荆,到底是詐尸還是另有隱情,我是刑警寧澤埃仪,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布乙濒,位于F島的核電站,受9級(jí)特大地震影響卵蛉,放射性物質(zhì)發(fā)生泄漏颁股。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一傻丝、第九天 我趴在偏房一處隱蔽的房頂上張望甘有。 院中可真熱鬧,春花似錦葡缰、人聲如沸梧疲。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)幌氮。三九已至,卻和暖如春胁澳,著一層夾襖步出監(jiān)牢的瞬間该互,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工韭畸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宇智,地道東北人蔓搞。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像随橘,于是被迫代替她去往敵國(guó)和親喂分。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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

  • KVO 作為 iOS 中一種強(qiáng)大并且有效的機(jī)制机蔗,為 iOS 開(kāi)發(fā)者們提供了很多的便利蒲祈;我們可以使用 KVO 來(lái)檢測(cè)...
    Draveness閱讀 6,887評(píng)論 11 59
  • KVO 作為 iOS 中一種強(qiáng)大并且有效的機(jī)制,為 iOS 開(kāi)發(fā)者們提供了很多的便利萝嘁;我們可以使用 KVO 來(lái)檢測(cè)...
    JzRo閱讀 929評(píng)論 0 2
  • 該文章屬于劉小壯原創(chuàng)梆掸,轉(zhuǎn)載請(qǐng)注明:劉小壯[http://www.reibang.com/u/2de707c93d...
    劉小壯閱讀 48,320評(píng)論 35 227
  • iOS底層原理總結(jié) - 探尋KVO本質(zhì) 對(duì)小碼哥底層班視頻學(xué)習(xí)的總結(jié)與記錄。 面試題:iOS用什么方式實(shí)現(xiàn)對(duì)一個(gè)對(duì)...
    愛(ài)吃兔兔的胡蘿卜吖閱讀 292評(píng)論 0 1
  • 前言 KVO作為iOS一個(gè)設(shè)計(jì)模式牙言,監(jiān)聽(tīng)對(duì)象屬性變化酸钦。通過(guò)屬性變化來(lái)做出一些處理。那么KVO底層原理是什么咱枉?相信大...
    楓葉無(wú)處漂泊閱讀 800評(píng)論 0 2