KVC初步

KVC是一種非常方便的給各種自定義類的屬性賦值的方式

@interface Person : NSObject
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *gender;
@end

@class Person;
@interface Earth : NSObject
@property (nonatomic, retain) Person *person;
@end 

-(void)setValue:forKey://Key是實(shí)例變量的變量名

Person *p = [[Person alloc] init];
[p setValue:[NSString stringWithFormat:@"Archer"] forKey:@"name"];  
Earth *earth = [[Earth alloc] init];
[earth setValue:p forKey:@"person"];  

-(id)valueForKey:

NSString *st = [p valueForKey:@"name"];

-(id)valueForKeyPath://點(diǎn)語(yǔ)法表示路徑

NSString *pN = [earth valueForKeyPath:@"person.name"];

-(void)setValue:forKeyPath:

[earth setValue:@"Smith" forKeyPath:@"person.name"];

-(void)setValuesForKeysDictionary://以字典里的key作key,以字典里的value做value,這是一種快捷寫(xiě)法

NSDictionary *pD = [[NSDictionary alloc] initWithObjectsAndKeys:@"Mary",@"name",@"W",@"gender",nil];
[p setValuesForKeysDictionary:pD];   

-(void)setValue:forUndefinedKey://如果輸入的key和變量名以及其變體(key,_key,isKey,_isKey)不同,就會(huì)崩潰,如果想要通過(guò)這樣的key訪問(wèn),就需要重寫(xiě)Undefined方法
-(id)valueForUndefinedKey:

@implementation Person

-(void)setValue:(id)value forUndefinedKey:(NSString*)key{
    if ([key isEqualToString:@"name1"]) {
        self.name = value;
    }else if ([key isEqualToString:@"gender1"]) {
        self.gender = value;
    }
}
-(id)valueForUndefinedKey:(NSString*)key {
    if ([key isEqualToString:@"name1") {
        return _name;
    }else if ([key isEqualToString:@"gender1"]) {
        return _gender;
    }
@end

實(shí)現(xiàn)機(jī)制

1.setName: kvc賦值首先在類中查找set+Key:名字的方法;如果類中不存在這樣的方法,轉(zhuǎn)2
2.在類中查找和(_key、_isKey、key、isKey)相同的實(shí)例變量;如果實(shí)例變量不存在,轉(zhuǎn)3
3.進(jìn)入U(xiǎn)ndefined方法,需要自行重寫(xiě)setValue:forUndefinedKey:和valueForUndefinedKey:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • KVC(Key-value coding)鍵值編碼,單看這個(gè)名字可能不太好理解。其實(shí)翻譯一下就很簡(jiǎn)單了,就是指iO...
    黑暗中的孤影閱讀 50,265評(píng)論 74 441
  • KVC(Key-value coding)鍵值編碼,單看這個(gè)名字可能不太好理解。其實(shí)翻譯一下就很簡(jiǎn)單了,就是指iO...
    Fendouzhe閱讀 735評(píng)論 0 6
  • KVC簡(jiǎn)單介紹 KVC(Key-value coding)鍵值編碼,就是指iOS的開(kāi)發(fā)中,可以允許開(kāi)發(fā)者通過(guò)Key...
    公子無(wú)禮閱讀 1,530評(píng)論 0 6
  • KVC(Key-value coding)鍵值編碼,單看這個(gè)名字可能不太好理解。其實(shí)翻譯一下就很簡(jiǎn)單了,就是指iO...
    朽木自雕也閱讀 1,702評(píng)論 6 1
  • KVC(Key-value coding)鍵值編碼,iOS的開(kāi)發(fā)中,可以允許開(kāi)發(fā)者通過(guò)Key名直接訪問(wèn)對(duì)象的屬性,...
    CALayer_Sai閱讀 2,699評(píng)論 0 4

友情鏈接更多精彩內(nèi)容