KVC

KVC (NSKeyValueCoding)一個非正式的 Protocol,提供一種機制來間接訪問對象的屬性。KVO 就是基于 KVC 實現(xiàn)的關(guān)鍵技術(shù)之一。

KVC(Key-value coding)鍵值編碼,顧名思義。額,簡單來說,是可以通過對象屬性名稱(Key)直接給屬性值(value)編碼(coding)“編碼”可以理解為“賦值”。這樣可以免去我們調(diào)用getter和setter方法,從而簡化我們的代碼,也可以用來修改系統(tǒng)控件內(nèi)部屬性

iOS的開發(fā)中,可以允許開發(fā)者通過Key名直接訪問對象的屬性,或者給對象的屬性賦值。而不需要調(diào)用明確的存取方法。這樣就可以在運行時動態(tài)在訪問和修改對象的屬性。而不是在編譯時確定,這也是iOS開發(fā)中的黑魔法之一。

- (nullable id)valueForKey:(NSString *)key;                          //直接通過Key來取值
- (void)setValue:(nullable id)value forKey:(NSString *)key;          //通過Key來設(shè)值
- (nullable id)valueForKeyPath:(NSString *)keyPath;                  //通過KeyPath來取值
- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;  //通過KeyPath來設(shè)值
@interface AnimalModel : NSObject
@property (nonatomic, strong) NSString *kind;
@property (nonatomic, strong)KindModel * model;

@end

@implementation AnimalModel
- (instancetype)init
{
    self = [super init];
    if (self) {
        self.model = [[KindModel alloc] init];
    }
    return self;
}
@end
@interface KindModel : NSObject
@property (nonatomic,strong)NSString * kindName;
@end
AnimalModel * model = [[AnimalModel alloc] init];
    [model setValue:@"reptile" forKey:@"kind"];
    [model setValue:@"pander" forKeyPath:@"model.kindName"];
    
    NSString * kind = [model valueForKey:@"kind"];
    
    NSString * kindName = [model valueForKeyPath:@"model.kindName"];
    
    NSLog(@"kind =======%@, name========%@",kind,kindName);


 NSMutableDictionary * dic = [[NSMutableDictionary alloc] init];
    [dic setObject:@"reptile1" forKey:@"kind"];
    [dic setObject:model.model forKey:@"model"];
    [model setValuesForKeysWithDictionary:dic];
    
    NSLog(@"kind1 =======%@, name1========%@",model.kind,model.model.kindName);
賦值原理
  • AnimalModel 查找是否有對應(yīng)屬性kind的 set方法 如果存在就調(diào)用set方法賦值
    [self setKind:dic[@"kind"]]

  • 如果沒有 會接著找 kind 屬性 kind = dic[@"kind"]

  • 如果找不到 會繼續(xù)查找 _kind _kind = dic[@"kind"]

  • 都找不到就會崩潰 -(void)setValue:(id)value forUndefinedKey:(NSString *)key

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

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

  • KVC(Key-value coding)鍵值編碼,單看這個名字可能不太好理解。其實翻譯一下就很簡單了,就是指iO...
    我的夢工廠閱讀 939評論 1 8
  • KVC簡單介紹 KVC(Key-value coding)鍵值編碼,就是指iOS的開發(fā)中,可以允許開發(fā)者通過Key...
    公子無禮閱讀 1,524評論 0 6
  • KVC(Key-valuecoding)鍵值編碼,單看這個名字可能不太好理解。其實翻譯一下就很簡單了,就是指iOS...
    榕樹頭閱讀 769評論 0 2
  • KVC KVC(Key-Value-Coding)是Cocoa框架為我們提供的非常強大的工具,簡譯為鍵值編碼。iO...
    Longshihua閱讀 441評論 0 6
  • 最近畫畫讓自己的內(nèi)心很是安靜,心無旁騖,仿佛世界只在這方寸之間。即便身旁是裝修敲打墻面的嘈雜,也能心安的置身事外忘...
    yanzio燕子窩閱讀 1,024評論 0 4

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