kvc
????也就是key-value-coding,即鍵值編碼,通常是用來給某一個對象的屬性進行賦值.
用法:
????1.對私有變量進行賦值
????2.字典轉(zhuǎn)模型
注意事項:
????1.字典轉(zhuǎn)模型的時候,字典中的某一個key一定要在模型中有對應(yīng)的屬性
????2.如果一個模型中包含了另外的模型對象,是不能直接轉(zhuǎn)化成功的良哲。
????3.通過kvc轉(zhuǎn)化模型中的模型,也是不能直接轉(zhuǎn)化成功的。
Lock *lock = [[Lock alloc] init];
lock.name = smart_lock;
lock.password = 000000;
假如name是私有變量驰弄,就無法外部賦值乾闰,kvc可以做到冕广,如下:
[lock setValue:@“smart_lock1” forKey:@"name"];
or
[lock setValue:@“smart_lock1” forKeyPath:@"name"];
區(qū)別呢疏日?---》
LockBluetooth *bluetooth = [[LockBluetooth?alloc] init];
lock.ble =??bluetooth?;
又是私有變量
[lock setValue:@"aa:bb:cc:dd:ee:ff"?forKeyPath:@"ble.mac"];
????說明對某一個屬性進行賦值,可以不用加下劃線,而且它的查找規(guī)則應(yīng)該是:先查找和直接寫入的字符串相同的成員變量,如果找不到就找以下劃線開頭的成員變量。
????kvc除了訪問私有變量這個用處外,還可以用于字典轉(zhuǎn)模型撒汉。在Person類對外提供一個接口,將轉(zhuǎn)模型的工作放在模型中進行
- (instancetype)initWithDict:(NSDictionary*)dict{
????if(self = [super init]) {
????????[self setValuesForKeysWithDictionary:dict];
????}
????return self;
}
調(diào)用:
NSDictionary*PersonDict = @{@"name":@"smart_lock1",@"password":@"000000"}; Lock *lock1 = [Lock personWithDict:lock];