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