KVC
除了常用的set/get方法取值賦值之外,還可以使用鍵值編碼的方式賦值取值
(說(shuō)直接點(diǎn),就是一個(gè)類,可以直接通過(guò)setValueForKey的方式賦值和取值)
iOS中我們每次聲明一個(gè)成員變量,一般使用@property的方式,該方式默認(rèn)存在set和get方法,但除此之外,我們使用如下方法亦可:
類PoClass,有個(gè)成員變量name
@class Course;
@interface PoClass : NSObject
{
NSString *name;
}
@end
如果name沒(méi)有@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的方式,可以理解為對(duì)setter和getter方式的補(bǔ)充。
如果有setter/getter方法,則優(yōu)先會(huì)調(diào)用setter/getter方法,沒(méi)有則通過(guò)查看_key或者key的value.
參照推酷:
首先去檢查是否存在setter,getter方法,如果不存在,它將在內(nèi)部查找名_key或key的實(shí)例變量。如果
還是沒(méi)有那就會(huì)報(bào)錯(cuò)誤。通過(guò)KVC 可以獲取不存在getter方法的對(duì)象值,無(wú)需通過(guò)對(duì)象指針直接訪問(wèn)。
【注意】:當(dāng)我們通過(guò)setValue:forKey:設(shè)置對(duì)象的值,或者valueForKey:來(lái)獲取對(duì)象的值時(shí),如果對(duì)象的實(shí)例變量為基本數(shù)據(jù)類型時(shí)(例如:char,int,float,BOOL),我們需要對(duì)這些數(shù)據(jù)類型進(jìn)行封裝。