iOS-KVC仅叫、KVO詳解

一、KVC

????1糙捺、KVC定義

? ? ? ? kvc鍵值編碼诫咱,在iOS的開發(fā)中,開發(fā)者通過Key名直接訪問對(duì)象的屬性洪灯,或者給對(duì)象的屬性賦值(主要可以給對(duì)象的私有屬性賦值)坎缭。而不需要調(diào)用明確的存取方法。這樣就可以在運(yùn)行時(shí)動(dòng)態(tài)地訪問和修改對(duì)象的屬性签钩。

????2掏呼、底層實(shí)現(xiàn)

? ? ? ? 當(dāng)對(duì)象調(diào)用setValue方法時(shí),方法內(nèi)部會(huì)做一下操作:

? ? ? ? (1)檢查是否存在相應(yīng)key的set方法铅檩,如果存在就調(diào)用set方法憎夷;

? ? ? ? (2)如果set方法不存在,就查找與key相同的名稱并且?guī)聞澗€的成員屬性柠并,如果有則直接給成員屬性賦值岭接;

? ? ? ? (3)如果沒有找到_key,就查找相同名稱的屬性key臼予,如果有直接賦值鸣戴;

? ? ? ? (4)如果還沒找到,則調(diào)用valueForUndefinedKey: 和 setValue: forUndefinedKey:方法粘拾;

? ? ? ? 這些方法的默認(rèn)實(shí)現(xiàn)都是拋出異常窄锅,我們可以根據(jù)需要重寫它們。

? ? ?3缰雇、方法

-(nullable id)valueForKey:(NSString*)key;//直接通過Key來取值

-(void)setValue:(nullable id)value forKey:(NSString*)key;//通過Key來設(shè)值

-(nullable id)valueForKeyPath:(NSString*)keyPath;//通過KeyPath來取值入偷,A對(duì)象擁有B對(duì)象,為B對(duì)象的屬性賦值

-(void)setValue:(nullable id)value forKeyPath:(NSString*)keyPath;//通過KeyPath來設(shè)值

將字典轉(zhuǎn)型成Model械哟,方法:setValuesForKeysWithDictionary:

? ? 例:// 定義一個(gè)字典NSDictionary *dict = @{

? ? ? ? ? ? ? ? ? ? ? ? ? @"name":@"jack",

? ? ? ? ? ? ? ? ? ? ? ? ? @"money":@"20.7",

? ? ? ? ? ? ? ? ? ? ? ? ? };

? ? // 創(chuàng)建模型Person *p = [[Person alloc] init];

? ? // 字典轉(zhuǎn)模型? ? [p setValuesForKeysWithDictionary:dict];



二:KVO

????1疏之、KVO定義

? ? ? ? 鍵值觀察機(jī)制,提供觀察某一屬性變化的方法

? ? 2暇咆、KVO使用

????(1)給對(duì)象的屬性添加觀察者  ? ? ? ??

[appleVC addObserver:self forKeyPath:@"name"options: NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];

? ??(2)若該屬性發(fā)生改變锋爪,系統(tǒng)自動(dòng)調(diào)用下面的方法:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)objectchange:(NSDictionary *)change context:(void*)context{? };

? ??(3)取消監(jiān)聽

-(void)dealloc{? ?[person removeObserver:self forKeyPath:@"test"];}

? ? (4)options所包括的內(nèi)容

NSKeyValueObservingOptionNew:change字典包括改變后的值NSKeyValueObservingOptionOld:change字典包括改變前的值NSKeyValueObservingOptionInitial:注冊(cè)后立刻觸發(fā)KVO通知NSKeyValueObservingOptionPrior:值改變前是否也要通知(這個(gè)key決定了是否在改變前改變后通知兩次)

????3.KVO的使用場(chǎng)景

????KVO用于監(jiān)聽對(duì)象屬性的改變丙曙。

  (1)下拉刷新其骄、下拉加載監(jiān)聽UIScrollView的contentoffsize亏镰;

  (2)webview混排監(jiān)聽contentsize拯爽;

 ∷髯ァ(3)監(jiān)聽模型屬性實(shí)時(shí)更新UI;

 √号凇(4)監(jiān)聽控制器frame改變逼肯,實(shí)現(xiàn)抽屜效果。

????4否副、KVO優(yōu)缺點(diǎn)

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

1.能夠提供一種簡(jiǎn)單的方法實(shí)現(xiàn)兩個(gè)對(duì)象間的同步汉矿;

2.能夠?qū)Ψ俏覀儎?chuàng)建的對(duì)象,即內(nèi)部對(duì)象的狀態(tài)改變作出響應(yīng)备禀,而且不需要改變內(nèi)部對(duì)象的實(shí)現(xiàn);

3.能夠提供觀察的屬性的最新值及先前值奈揍;

4.用keypaths觀察屬性曲尸,也可以觀察嵌套的對(duì)象;

缺點(diǎn):

1.觀察的屬性必須使用string來定義男翰;

2.對(duì)屬性重構(gòu)將導(dǎo)致我們的觀察代碼不可再用另患;

3.當(dāng)釋放觀察者時(shí)需要移除觀察者。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛾绎,一起剝皮案震驚了整個(gè)濱河市昆箕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌租冠,老刑警劉巖鹏倘,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異顽爹,居然都是意外死亡纤泵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門镜粤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捏题,“玉大人,你說我怎么就攤上這事肉渴」” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵同规,是天一觀的道長(zhǎng)循狰。 經(jīng)常有香客問我庸诱,道長(zhǎng),這世上最難降的妖魔是什么晤揣? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任桥爽,我火速辦了婚禮,結(jié)果婚禮上昧识,老公的妹妹穿的比我還像新娘钠四。我一直安慰自己,他們只是感情好跪楞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布缀去。 她就那樣靜靜地躺著,像睡著了一般甸祭。 火紅的嫁衣襯著肌膚如雪缕碎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天池户,我揣著相機(jī)與錄音咏雌,去河邊找鬼。 笑死校焦,一個(gè)胖子當(dāng)著我的面吹牛赊抖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寨典,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼氛雪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了耸成?” 一聲冷哼從身側(cè)響起报亩,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎井氢,沒想到半個(gè)月后弦追,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毙沾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年骗卜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片左胞。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寇仓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出烤宙,到底是詐尸還是另有隱情遍烦,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布躺枕,位于F島的核電站服猪,受9級(jí)特大地震影響供填,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜罢猪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一近她、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧膳帕,春花似錦粘捎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至汤徽,卻和暖如春娩缰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谒府。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工拼坎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狱掂。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓演痒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親趋惨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,103評(píng)論 1 32
  • KCV 其實(shí)由于ObjC的語言特性惦蚊,你根部不必進(jìn)行任何操作就可以進(jìn)行屬性的動(dòng)態(tài)讀寫器虾,這種方式就是Key Value...
    TYM閱讀 1,059評(píng)論 0 4
  • KVC(Key-valuecoding)鍵值編碼,單看這個(gè)名字可能不太好理解蹦锋。其實(shí)翻譯一下就很簡(jiǎn)單了兆沙,就是指iOS...
    榕樹頭閱讀 714評(píng)論 0 2
  • KVO (Key-Value Observing),俗稱“鍵值監(jiān)聽”莉掂,能夠用來監(jiān)聽對(duì)象屬性的變化葛圃,也是 Objec...
    valentizx閱讀 357評(píng)論 0 3
  • 2018年10月6日,有幸聽取許維素教授的公開課憎妙,受益良多库正。 本期公開課的主題是“孕育成長(zhǎng)的希望”。講座初厘唾,我們共...
    晴明豆豆閱讀 727評(píng)論 0 1