KVC
除了常用的set/get方法取值賦值之外,還可以使用鍵值編碼的方式賦值取值
(說直接點,就是一個類,可以直接通過setValueForKey的方式賦值和取值)
iOS中我們每次聲明一個成員變量,一般使用@property的方式,該方式默認存在set和get方法,但除此之外,我們使用如下方法亦可:
類PoClass,有個成員變量name
@class Course;
@interface PoClass : NSObject
{
NSString *name;
}
@end
如果name沒有@property
PoClass *po = [[PoClass alloc]init]
[po setValue:@"polen" forKey:@"name"];
NSString *getName = [po valueForKey:@"name"]
[po setValue:@"polenPath" forKeyPath:@"course.name"];
NSString *getName = [po valueForKeyPath:@"course.name"];
key的方式和path的方式,可以理解為對setter和getter方式的補充。
如果有setter/getter方法,則優先會調用setter/getter方法,沒有則通過查看_key或者key的value.
參照推酷:
首先去檢查是否存在setter,getter方法,如果不存在,它將在內部查找名_key或key的實例變量。如果
還是沒有那就會報錯誤。通過KVC 可以獲取不存在getter方法的對象值,無需通過對象指針直接訪問。
【注意】:當我們通過setValue:forKey:設置對象的值,或者valueForKey:來獲取對象的值時,如果對象的實例變量為基本數據類型時(例如:char,int,float,BOOL),我們需要對這些數據類型進行封裝。