一帕翻、Key Value Coding 協(xié)議
Key Value Coding是cocoa的一個(gè)基本組成部分宠进。
KVC的操作方法都是由NSKeyValueCoding協(xié)議提供晕拆,而NSObject實(shí)現(xiàn)了這個(gè)協(xié)議,所以幾乎所有的對象都支持KVC操作材蹬。
通過KVC調(diào)用對象訪問對象的屬性時(shí)实幕,如:[self valueForKey:@"key"]執(zhí)行的步驟
1.首先會查找對象是否帶有key屬性的set方法,如果沒有找到
2.繼續(xù)查找對象是否帶有key這個(gè)實(shí)例變量赚导,如果沒有找到
3.調(diào)用方法-(id) valueForUndefinedKey:和setValue: forUndefinedKey:這些方法的默認(rèn)實(shí)現(xiàn)都是拋出一個(gè)NSUndefinedKeyEXception異常錯(cuò)誤茬缩,根據(jù)需要重寫它們
什么是鍵-值土浸,什么是鍵路徑
鍵:一個(gè)字符串杀赢,與模型的屬性名相同
值:模型的屬性對應(yīng)的值
鍵值路徑:是一個(gè)用點(diǎn)作分隔符的鍵組成的字符串饱亿。通過鍵路徑可以指定對象的任意深度的路徑螺垢,使其指向相關(guān)對象的特定屬性如"person.age"
KVC常用操作方法
動態(tài)設(shè)置:
setValue:屬性值 forKey 屬性名
setValue:屬性值 forKeyPath:屬性路徑(用于復(fù)合路徑拯田,person.account)
動態(tài)取值
valueForKey:屬性名
valueForKeyPath:屬性名
字典轉(zhuǎn)模型 常用到的方法
setValuesForKeysWithDictionary:
這個(gè)方法會依次調(diào)用字典中的鍵值對康聂,進(jìn)行賦值, 每找到一個(gè)屬性尚辑,就會帶調(diào)用另一個(gè)方法
setValue:屬性值 forKey屬性名
如果找不到對應(yīng)的屬性瞄崇,會調(diào)用
setValue: forUndefinedKey:
默認(rèn)這個(gè)方法是返回一個(gè)異常錯(cuò)誤员串,需要重寫這個(gè)方法勇哗,執(zhí)行操作
二、KVO
什么是KVO
Key Value Observing 寸齐,它是一種觀察者模式欲诺,用于監(jiān)聽屬性的變化,相應(yīng)的objects會被通知渺鹦。
實(shí)現(xiàn)方式
KVO是通過OC的運(yùn)行時(shí)實(shí)現(xiàn)的扰法,當(dāng)?shù)谝淮斡^察某個(gè)object時(shí),
runtime會創(chuàng)建一個(gè)新的繼承自object對應(yīng)類的派生類毅厚,在這個(gè)新的子類中塞颁,
它重寫了setter方法(方法內(nèi)添加通知機(jī)制),系統(tǒng)將object的isa指針指向這個(gè)派生類,
這個(gè)object對象就被巧妙的成為了該派生類的對象祠锣,
因此調(diào)用對象的setter方法的時(shí)候就會調(diào)用重寫的setter方法酷窥,從而激活了鍵值通知機(jī)制。
此外伴网,派生類還重寫了dealloc方法釋放資源蓬推。