// 第八章(二) KVC
//KVC key-value-coding 键值编码 间接访问实例变量
//KVO key-value-observer 键值观察者 观察某个实例变量是否发生变化
//key:键,⽤用于标识实例变量
//vlaue:实例变量对应的值
Person *per = [[Person alloc]init];
per.name = @"志玲";
[per setValue:@"志玲" forKey:@"_name"];
NSLog(@"%@",per.name);
NSLog(@"%@",[per valueForKey:@"_name"]);
//不给_number添加setter getter方法; 甚至_number是private 都能给它赋值
// 所以一般不会让别人知道有什么变量
[per setValue:@"12" forKey:@"_number"];
[per printfNumber];
[per setValue:@"LOL" forKey:@"_hobby"];
[per printfNumber];
NSLog(@"%@",[per valueForKey:@"_number"]);
Telephone *phone = [[Telephone alloc]init];
per.phone = phone;
per.phone.phoneNumber = @(13954638766);
NSLog(@"%@",per.phone.phoneNumber);
//通过KVC访问属性的属性, 通过路径访问
[per setValue:@"iPhone" forKeyPath:@"_phone._brand"];
NSLog(@"%@", per.phone.brand);
NSLog(@"%@", [per valueForKeyPath:@"_phone._brand"]);
//利用字典给对象的属性赋值
NSDictionary *dic = @{@"brand":@"sumsung", @"phoneNumber":@"231" ,@"color":@"purple", @"heihei":@"是我"};
Telephone *pho = [[Telephone alloc]init];
[pho setValuesForKeysWithDictionary:dic];
NSLog(@"%@ %@",pho.brand, pho.phoneNumber);
//对于不存在对象的属性 会自动调用setValue:forUndefinedKey:
// 系统默认实现是抛出⼀个异常; 因此需要在.m文件实现方法:
//利用kvc给本类对象赋值时,如果没有与key对应的实例变量的话, 系统会自动调用方法
-(void)setValue:(id)value forUndefinedKey:(NSString *)key{
NSLog(@"不包括%@",key);//容错手段
NSLog(@"%@",value);
//_brand = value;
if ([key isEqualToString:@"color"]) {
_colour = value;
}
}
OC - 第八章(二) KVC
最新推荐文章于 2023-05-14 15:14:57 发布