键值编码

作者: guoguojianshu | 来源:发表于2019-02-11 18:43 被阅读0次

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

    相关文章

      网友评论

        本文标题:键值编码

        本文链接:https://www.haomeiwen.com/subject/pjvqeqtx.html