KVC setvalue:forkey與setvalue:forkeypath的區別

經常使用的KVC操做方法以下:spa

  • 動態設置: setValue:屬性值 forKey:屬性名(用於簡單路徑)、setValue:屬性值 forKeyPath:屬性路徑(用於複合路徑,例如Person有一個Account類型的屬性,那麼person.account就是一個複合屬性) 
  • 動態讀取: valueForKey:屬性名 valueForKeyPath:屬性名(用於複合路徑)
[student setValue:@"Emily" forKey:@"name"];
[student setValue:@100 forKeyPath:@"person.number"];

KVC查找一個屬性進行讀取方法:code

  • 若是是動態設置屬性,則優先考慮調用set方法,若是沒有該方法則搜索成員變量_student,若是仍然不存在則搜索成員變量student,若是最後仍然沒搜索到則會調用這個類的setValue:forUndefinedKey:方法(注意搜索過程當中無論這些方法、成員變量是私有的仍是公共的都能正確設置); 
  • 若是是動態讀取屬性,則優先考慮調用a方法(屬性a的getter方法),若是沒有搜索到則會優先搜索成員變量_a,若是仍然不存在則搜索成員變量a,若是最後仍然沒搜索到則會調用這個類的valueforUndefinedKey:方法(注意搜索過程當中無論這些方法、成員變量是私有的仍是公共的都能正確讀取);

 KVC在使用時,須要注意,鍵值名稱在對象屬性中必須存在,不然會崩潰!對象

相關文章
相關標籤/搜索