编译器会自动生成setter和getter的访问器方法,但是这样是直接调用访问器方法,还有一种以间接的方法进行修改对象的属性的方法,这种方法使用的就是键值编码。
// 这样的就是访问 访问方法选择器的方法,直接使用setter方法进行方法的赋值
[self.view setBackgroundColor:[UIColor redColor]];
// 这样就是使用键值方法,对对象的某个属性进行间接赋值的方法
[self.view setValue:[UIColor redColor] forKey:@"backgroundColor"];
//forKeyPath是关键路径,前面的属性是相对于接受者的,下一级的属性是相对于前面的属性的,这个例子view是相对于self的,backgroundView是相对于view的
[self setValue:[UIColor redColor] forKeyPath:@"view.backgroundColor"];
// 获取制定key的值
id value = [self.view valueForKey:@"backgroundColor"];
/**
如果valueforkey的key不存在,会调用这个方法,但是必须得在子类中,进行重写,如果在其他类中实现,不会调用这个方法,否则会奔溃
例如上面的方法,必须在self.view方法中的view中进行重写这个方法
@param key 制定的key值
@return 返回的值
*/
-(id)valueForUndefinedKey:(NSString *)key{
return @"";
}
// 返回的值是个字典,参数为为字符串的数组,调用这个方法会对参数的数组中key值进行valueForKey操作,返回的字典就是一个key和keyvalue的值,组成的字典
NSDictionary * dict = [self dictionaryWithValuesForKeys:@[@"view",@"viewIfLoaded",@"parentViewController",@"presentedViewController",@"presentingViewController"]];
// setter方法
//给消息接受者指定的key设置指定的值
[self.view setValue:[UIColor yellowColor] forKey:@"backgroundColor"];
[self setValue:[UIColor orangeColor] forKeyPath:@"view.backgroundColor"];
//setValuesForKeysWithDictionary底层是对字典中的key进行遍历,对每个key调用setValue:forKeyPath:方法,在字典中的key不能使用关键路径的形式
[self.view setValuesForKeysWithDictionary:@{@"backgroundColor":[UIColor purpleColor],@"alpha":[NSNumber numberWithFloat:0.5]}];
网友评论