1 KVC(key - value coding )的基本概念
1>是一種間接更改對象狀態(或者說屬性值)
2>本質特征:采用字符串來標示對象的屬性變量,并通過這個標示來更改對象狀態
2 實現方法
1>存值:[對象 setValue :@“” forKey:@“”];
2>取值:[對象 valueForKey:@“”];
3 鍵路徑:訪問這個類中的屬性的屬性
1>取值:valueForKeyPath
2>存值:forKeyPath
4
如果用setValue forKey 如果寫才key不存在,沒定義,重寫setValue forKey方法,自己可以打印出來對應的提示信息,系統就不會蹦掉了
5
如果對標量設置nil(nil == 0)會觸發setNilValueKey 方法,也回蹦,所以也可以重寫setNIlValueKey 方法
6
//person2類型不確定,所以不能直接對屬性賦值
Person2.age = 10;
//person2是對象,所以可以調用父類NSObject的setValue forKey方法
id person2 = person;
[person2 setValue:@"hahha" forKey:@"name"];
[person2 valueForKey:@"name"];
//編譯不會看key存在否,只有到運行時候才檢測,不存在就調用setValueForUndedinedKey
7
設置時,如果名字是小寫,首字母大寫也能識別,但是全大學不能識別;加下劃線,也可以識別
獲取時,如果名字是小寫,首字母大寫,也不能識別;加下劃線也都能識別(對在主函數內的下劃線)
8 鍵路徑和kvc的區別
鍵路徑:當前對象,有其他類為自己的成員變量,通過當前對象的成員變量,找這個成員變量的成員變量,,,也就是說給成員變量的成員變量賦值(設置成員變量的成員變量,可以寫兩個點,a.student.name 來實現,別忘了包含頭文件,別忘記兩個都有set get方法(第一個點是get方法,第二個點是set方法))
kvc:對當前對象的成員變量賦值
9用鍵路徑的時候
一個類a是當前類s的成員變量
要先新建一個a,并把他賦值給s作為他的成員變量,
然后再用鍵語法,給a的成員變量賦值
不然,s就沒有a的對象,怎么給對象的成員變量賦值
10
鍵路徑不限定長度,就是你可以給 成員變量的成員變量的……的成員變量賦值
11 kvc可點語法關系
屬于正交關系,也就說沒關系,點語法就是調用get set方法
12KVC 在集合中的使用
1 >創建一個日期的方法
//NSDate用法
//1.創建一個日歷對象 -- 就是獲取當前日歷
NSCalendar *cal = [NSCalendar currentCalendar];
//2.創建日期的組成部分
NSDateComponents *com = [[NSDateComponents alloc] init];
com.year = 1995;
com.month = 5;
com.day = 1;
NSDate *date1 = [cal dateFromComponents:com];
stu1.date = date1;//吧這個日期賦值給學生的出生日期
2 >打印出學生的所有身高
NSArray *strArr1 = @[stu1,stu2,stu3];
//求身高最高的學生
NSNumber *maxHight = [strArr1 valueForKey:@"height"];
NSLog(@"%@",maxHight);
3 >打印出學生最高的身高
NSArray *strArr1 = @[stu1,stu2,stu3];
//求身高最高的學生
NSNumber *maxHight = [strArr1 valueForKeyPath:@"@max.height”]; //里面有兩個@
NSLog(@"%@",maxHight);