KVC,KVO

主要分成一下幾個部分
1.KVC
  1.1 KVC簡介
  1.2 KVC使用
2.KVO
2.1 KVO簡介
2.2 KVO使用

KVC

1.1 KVC簡介

什么是KVC?

KVC-> Key,Value,Coding亮垫,鍵值編碼。
通常我們調(diào)用方法或者訪問實例屬性的方式僧诚,得到或者修改屬性值恬偷。
KVC則是直接利用字符串描述對對象屬性進行訪問荔茬。

KVC的方法

- (nullable id)valueForKey:(NSString *)key;   //直接通過Key來取值
- (void)setValue:(nullable id)value forKey:(NSString *)key;   //通過Key來設(shè)值
- (nullable id)valueForKeyPath:(NSString *)keyPath;   //通過KeyPath來取值
- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;  //通過KeyPath來設(shè)值

1.2 KVC使用

1.訪問對象屬性(直接方法,通過關(guān)系式訪問)
方法:

直接訪問
- (nullable id)valueForKey:(NSString *)key;

通過關(guān)系訪問
- (nullable id)valueForKeyPath:(NSString *)keyPath;
例如:
[person valueForKeyPath:@"address.city"];

Person有一個address屬性,address屬性中有一個city屬性。

注意:valueForKeyPath:返回跟接受者相關(guān)的路徑的值焕梅。
如果路徑里面沒找到师脂,就會調(diào)用valueForUndefineKey方法

2.訪問私有成員變量
KVC還可以更改私有成員變量担孔。利用KVC我們可以訪問賦值一個對象的私有成員。

但是如果說這樣,是不是就能去修改蘋果里面的一些私有東西了?

建議還是不要3跃8馄!在app上架前審核的過程中酌心,蘋果的官方會對這類做法嚴(yán)格檢查拌消,如果發(fā)現(xiàn),蘋果的審核時不能通過的安券。

KVO

2.1 KVO簡介

什么是KVO墩崩?

KVO是一個種觀察者設(shè)計模式。比如:指定一個被觀察對象(例如Person類)侯勉,當(dāng)對象某個屬性(例如Person中的字符串name)發(fā)生更改時鹦筹,對象會獲得通知,并作出相應(yīng)處理址貌;
【且不需要給被觀察的對象添加任何額外代碼铐拐,就能使用KVO機制】

KVO基本原理:

當(dāng)觀察對象A時徘键,KVO會動態(tài)的創(chuàng)建一個對象A的當(dāng)前類的子類,并且重寫了新的子類的被觀察屬性keyPath的setter方法遍蟋。setter方法隨后負責(zé)通知觀察對象屬性改變的狀況吹害。

具體來講:

1.觀察對象時,會動態(tài)創(chuàng)建一個新類:NSKVONotifying_A,并且A對象的isa指針指向新類匿值。A對象就變成新類的對象了赠制。
2.重寫了新類中觀察的屬性的setter方法。新的setter方法會負責(zé)在調(diào)用員setter方法之前和之后挟憔,通知所有觀察對象屬性值的更改情況钟些。
3.KVO的:KVO的鍵值觀察通知依賴于 NSObject 的兩個方法:willChangeValueForKey:和 didChangevlueForKey:,在存取數(shù)值的前后分別調(diào)用2個方法绊谭。

使用注意:

1.觀察者觀察的是屬性政恍。只有執(zhí)行了setter方法,或者使用KVC賦值才會觸發(fā)KVO機制达传。
比如給成員變量_name = @“Hayder” 就不會觸發(fā)KVO機制篙耗。

2.2 KVO使用

KVO使用步驟

1.注冊觀察者,實時監(jiān)聽
  2.在回調(diào)方法中處理屬性變化
  3.移除觀察者

實現(xiàn)方法:
1.注冊觀察者:

//第一個參數(shù)observer:觀察者 (這里觀察self.myKVO對象的屬性變化)
//第二個參數(shù)keyPath: 被觀察的屬性名稱(這里觀察self.myKVO中num屬性值的改變)
//第三個參數(shù)options: 觀察屬性的新值宪赶、舊值等的一些配置(枚舉值宗弯,可以根據(jù)需要設(shè)置,例如這里可以使用兩項)
//第四個參數(shù)context: 上下文搂妻,可以為kvo的回調(diào)方法傳值(例如設(shè)定為一個放置數(shù)據(jù)的字典)
[A addObserver:self forKeyPath:@"name" options:
NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];

2.屬性(keyPath)的值發(fā)生變化時蒙保,收到通知,調(diào)用一下方法.

//keyPath:屬性名稱
//object:被觀察的對象
//change:變化前后的值都存儲在change字典中
//context:注冊觀察者時欲主,context傳過來的值
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邓厕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扁瓢,更是在濱河造成了極大的恐慌详恼,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件引几,死亡現(xiàn)場離奇詭異昧互,居然都是意外死亡,警方通過查閱死者的電腦和手機伟桅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門硅堆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贿讹,你說我怎么就攤上這事」宦樱” “怎么了民褂?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我赊堪,道長面殖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任哭廉,我火速辦了婚禮脊僚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘遵绰。我一直安慰自己辽幌,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布椿访。 她就那樣靜靜地躺著乌企,像睡著了一般。 火紅的嫁衣襯著肌膚如雪成玫。 梳的紋絲不亂的頭發(fā)上加酵,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音哭当,去河邊找鬼猪腕。 笑死,一個胖子當(dāng)著我的面吹牛钦勘,可吹牛的內(nèi)容都是我干的陋葡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼个盆,長吁一口氣:“原來是場噩夢啊……” “哼脖岛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起颊亮,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤柴梆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后终惑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绍在,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年雹有,在試婚紗的時候發(fā)現(xiàn)自己被綠了偿渡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡霸奕,死狀恐怖溜宽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情质帅,我是刑警寧澤适揉,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布留攒,位于F島的核電站,受9級特大地震影響嫉嘀,放射性物質(zhì)發(fā)生泄漏炼邀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一剪侮、第九天 我趴在偏房一處隱蔽的房頂上張望拭宁。 院中可真熱鬧,春花似錦瓣俯、人聲如沸杰标。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽在旱。三九已至,卻和暖如春推掸,著一層夾襖步出監(jiān)牢的瞬間桶蝎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工谅畅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留登渣,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓毡泻,卻偏偏與公主長得像胜茧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子仇味,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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