是一種間接地訪問物件例項變數的機制
通過setvalue: forkey :間接地為物件的例項變數做賦值
通過valueforkey:間接地取到物件的例項變數
首先定義兩個類person類 和phone類
//1.先檢查有沒有name這個例項變數
//2.如果沒有,會檢查同名的帶_的例項變數
//3.如果還沒有,會自動呼叫setvalueforundefinedkey:這個方法
person *per = [[person alloc] init];
[per setvalue:@"shuai" forkey:@"na"];
//1.先檢查有沒有name這個例項變數
//2.如果沒有,檢查有沒有同名帶_的例項變數
//3.如果沒有,就會自動呼叫valueundefinedkey:這個方法
nslog(@"%@",[per valueforkey:@"name1"]);
[per setvalue:@18 forkey:@"age"];
nslog(@"%@",[per valueforkey:@"age"]);
phone *phone = [[phone alloc] init];
//[phone setvalue:@"ipone" forkey:@"brand"];
[per setvalue:phone forkey:@"phone"];
nslog(@"%@",[per valueforkey:@"phone"]);
// nslog(@"%@",[phone valueforkey:@"brand"]);
//通過per為手機的品牌名賦值
//setvalueforkeypath
//給人的手機下地品牌賦值
[per setvalue:@"huawei" forkeypath:@"phone.brand"];
nslog(@"%@",[phone valueforkey:@"brand"]);
nslog(@"%@",[per valueforkeypath:@"phone.brand"]);
// setvaluesforkeyswithdictionary:<#(nsdictionary *)#>
// insert code here...
nslog(@"hello, world!");
//使用陣列管理圖書
nsmutablearray *bookarr = [[nsmutablearray alloc] initwithcapacity:1];
book *book1 = [[book alloc] initwithname:@"三國演義" price:20];
book *book2 = [[book alloc]initwithname:@"西遊記" price:18];
book *book3 = [[book alloc ] initwithname:@"水滸傳" price:21];
book *book4 = [[book alloc] initwithname:@"紅樓夢" price:25];
//tianjia
[bookarr addobject:book1];
[bookarr addobject: book2];
[bookarr addobject:book3];
賦值時key 不存在時會自動呼叫該方法
//防止kvc賦值時,由於key不存在導致崩潰,通常用於錯誤處理
- (void) setvalue:(id)value forundefinedkey:(nsstring *)key
KeyValueCoding 鍵值編碼
void btnclick uibutton btn if btn.tag 100 修改 teacher 的變數 else 修改 student 的變數 sm setvalue xiaoxin forkey name 給成員變數賦值 void setvalues sm studentmodel al...
鍵值編碼KVC
許多程式設計技術都基於間接機制,包括整個物件導向程式設計領域。本章將介紹另一種間接機制,這種機制不屬於obj c語言的特性,而是cocoa提供的一種特性。我們知道在c 中可以通過反射讀寫乙個物件的屬性,有時候這種方式特別方便,因為你可以利用字串的方式去動態控制乙個物件。其實由於objc的語言特性,你...
鍵 值編碼擴充套件
coreanimation擴充套件了nskeyvaluecoding協議,因為它從屬caanimation和calayer類。此擴充套件為某些鍵新增預設值,擴充套件封裝約定,為cgpoint cgrect cgsize catransform3d新增鍵路徑支援 鍵 值編碼遵從容器類caanimati...