大神博客

键值编码

2019-02-11  本文已影响0人  guoguojianshu

编译器会自动生成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]}];
上一篇下一篇

猜你喜欢

热点阅读