iOS-KVC詳解
阿新 • • 發佈:2018-11-13
定義:(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寫錯時,編譯時不會報錯,執行時會報錯。