Key-Value Coding 簡(jiǎn)稱(chēng)KVC
Key-Value Coding是一種可以用字符串間接訪問(wèn)一個(gè)對(duì)象屬性和關(guān)系的機(jī)制.
你通常使用存取器(accessor)來(lái)存取一個(gè)對(duì)象的屬性,一個(gè)get accessor(或getter)返回一個(gè)屬性的值,一個(gè)set accessor(或setter)設(shè)置一個(gè)屬性的值.在Objective-C,你也可以用實(shí)例變量來(lái)存取一個(gè)屬性.用以上方法存取一個(gè)對(duì)象都是很簡(jiǎn)單的,但都需要調(diào)用特定的屬性方法或亦是名.如果屬性列表變多或改變了,你都必須寫(xiě)入屬性的存取代碼.但遵循key-value coding的對(duì)象不同,它提供了適用于所有屬性的一致且簡(jiǎn)單的消息傳遞接口.
Key-Value Coding是構(gòu)成一些其它Cocoa技術(shù)的基本概念,比如key-value observing,cocoa bindings,Core Data和AppleScript-ability.Key-Value Coding也可讓你的代碼更簡(jiǎn)潔.
使用Key-Value Coding的對(duì)象
當(dāng)繼承(直接或間接)了NSObject的對(duì)象,都采用了KVC,它不僅采用了NSKeyValueCoding
協(xié)議,也提供了一個(gè)基本方法的默認(rèn)實(shí)現(xiàn).這樣的對(duì)象可以通過(guò)緊湊的消息傳遞界面來(lái)實(shí)現(xiàn)其他對(duì)象:
-
存取對(duì)象屬性:這個(gè)協(xié)議聲明了一些方法,比如
valueForKey:
和setValue:forKey:
,可以通過(guò)屬性名字或鍵的字符串來(lái)存取屬性.這些和相關(guān)方法的默認(rèn)實(shí)現(xiàn)可以用鍵來(lái)定位并與底層的數(shù)據(jù)交互. -
操作集合屬性:對(duì)象的集合屬性(比如:
NSArray
)存取方法的默認(rèn)實(shí)現(xiàn)也是其它屬性是一樣的.另外,如果一個(gè)對(duì)象為一個(gè)屬性定義了集合的存取器方法,它實(shí)現(xiàn)了對(duì)一個(gè)集合內(nèi)容的鍵值存取.這個(gè)通常比直接存取更高效的,并允許你通知標(biāo)準(zhǔn)接口來(lái)訪問(wèn)自定義的集合對(duì)象. - 在集合對(duì)象上調(diào)用集合運(yùn)算符:當(dāng)在KVC對(duì)象里存取一個(gè)集合屬性,你可插入集合運(yùn)算符
- 存取非對(duì)象屬性
- 通過(guò)鍵值路徑存取屬性