在KVC中有著這樣的兩種相似的方法
- setValue:forKeyPath:
- setValue:forKey:
這兩種方法中的Key和KeyPath總是不理解,到底兩者之間有什么區(qū)別呢?
在官方文檔中對(duì)這兩個(gè)參數(shù)有著這樣的解釋?zhuān)?/p>
- keyPath: A key path of the form relationship.property (with one or more relationships): for example “department.name” or “department.manager.lastName.”
- key: The name of one of the receiver's properties.
個(gè)人理解,keyPath是一個(gè)完整的‘路徑’昏鹃,指向關(guān)系鏈中最末關(guān)系節(jié)點(diǎn)的屬性,舉一個(gè)不恰當(dāng)?shù)睦樱?/p>
- 文件路徑:/Users/choshoryo/Desktop/123.png
這就是一個(gè)完整的路徑,它的‘關(guān)系鏈’結(jié)構(gòu)就是/文件夾/文件夾/文件夾/文件凹炸,最終真正要處理的是最末端文件夾中的123.png文件。同理昼弟,keyPath中真正要賦值的也是最末端的property啤它,在找到該屬性之前,系統(tǒng)會(huì)沿著這條關(guān)系鏈一層一層去尋找舱痘。因此变骡,keyPath傳入的參數(shù)應(yīng)是一條描述著與接收者有關(guān)系的對(duì)象的屬性的路徑。
而相對(duì)的芭逝,key傳入的參數(shù)則是接收者自己本身的屬性塌碌。
針對(duì)keyPath為參數(shù)的KVC方法旬盯,系統(tǒng)是通過(guò)valueForKey:方法查找最終要賦值的屬性台妆,官方文檔中有如此說(shuō)明:
-
Discussion (- setValue:forKeyPath:)
The default implementation of this method gets the destination object for each relationship using valueForKey:, and sends the final object a setValue:forKey: message.
此作為補(bǔ)充加深理解