天天看點

OC之KVC

KVC Key Value Coding 是一種可以直接通過字元串的名字(key)來通路類屬性的機制。

通過KVC,可以擷取不存在getter方法的對象值, 無需通過對象指針直接通路。

valueForKey: 和  setValue: forKey: 如若對象的執行個體變量為基本資料類型時,我們需要對資料進行封裝。

路徑: valueForKeyPath: 和  setValue: forKeyPath:       除了通過鍵設定值外,鍵/值編碼還支援指定路徑,像檔案系統一樣,                用“點”号隔開。 

OC之KVC

KVC查詢類屬性的順序: ①檢查是否存在 -<key> 、 -is<key> (隻針對布爾值有效)或者 -get<key> 的通路器方法,如果有可能,就是用這些方法傳回值;      檢查是否存在名為 -set<key>: 的方法,并使用它做設定值。對于 -get<key> 和 -set<key>: 方法,将大寫 Key 字元串的第一個字母,并與 Cocoa 的方法命名保持一緻;

②如果上述方法不可用,則檢查名為 -_<key> 、 -_is<key> (隻針對布爾值有效)、 -_get<key> 和 -_set<key>: 方法;

③如果沒有找到通路器方法,可以嘗試直接通路執行個體變量。執行個體變量可以是名為: <key> 或 _<key>;

一對多的關系:      如果向NSArray請求一個鍵值,它實際上會查詢你數組中得每個對象來查找這個鍵值,然後将查詢結果打包到另一個數組中并傳回給你。

OC之KVC

KVC的簡單運算: 隻有這五個方法。傳回的是對象,NSNumber. 

OC之KVC

集合運算符是一個特殊的Key Path,可以作為參數傳遞給valueForKeyPath:方法, 注意隻能是這個方法 ,如果傳給了valueForKey:方法保證你程式崩潰。

KVC的運算可以直接對數組對象做求和等運算

OC之KVC

KVC 優點:不用調用和寫一堆set、get方法,友善簡潔,求平均值,總值什麼的很簡便。 缺點:key容易寫錯,寫錯就崩潰。