1. 程式人生 > >iOS-KVC詳解

iOS-KVC詳解

定義:(Key-Value-Coding)鍵值編碼(間接訪問物件屬性的機制,以字串的形式向物件傳送訊息)

一種使用字串而不是訪問器去訪問一個物件例項變數的機制,使用這個機制不需要呼叫set或者get方法來訪問成員變數,它是通過setValue:forKey:和valueForKey:方法。

案例

簡單路徑:對物件的屬性進行賦值和取值

複雜路徑:對物件屬性的屬性進行賦值和取值

KVC 相當於Set和Get方法(鍵值配對),能夠對物件的屬性進行賦值和取值

People * p1 = [[People alloc] init];
p1.car.name = @"自行車";
//賦值
//簡單路徑
[p1 setValue:@"劉備" forKey:@"_name"];
//複雜路徑
[p1 setValue:@"三輪車" forKeyPath:@"_car.name"];
//取值
NSString * name = [p1 valueForKey:@"_name"];

KVC 只能對_name進行取值和賦值(_name和name都存在)

Man * man = [[Man alloc] init];
[man setValue:@"亞當" forKey:@"name"];
NSLog(@"01%@",man.description);//此時只輸出_name
[man setValue:@"女媧" forKey:@"_name"];
NSLog(@"02%@",man.description);//此時只輸出_name

如果沒有_name的屬性,但是有name這個屬性的情況下,可以通過KVC對例項變數_name進行賦值和取值

Woman * woman = [[Woman alloc] init];
[woman  setValue:@"夏娃" forKey:@"name"];
 NSLog(@"%@",woman.description);

總結: 例項變數(屬性)

/*
規則:
賦值:
1.先找set方法,如果沒有呢?就找_name
2.如果沒有_name,找name
3.如果沒有name,那麼就會崩潰
取值:
1.先找get, 如果沒有get 就找_name;
2.如果沒有_name,找name
3.如果沒有name,就會崩潰
*/

缺點如果key寫錯時,編譯時不會報錯,執行時會報錯