IOS开发-KVC

1. 什么是kvc

kvc--key-value coding,健值编码

可以通过key直接访问对象属性的value的方法

 

2.使用场景

kvc主要是为了让代码变的更简介明了

用的比较多的是在后台数据解析,还有访问一些没有setter,getter方法的属性

 

3.代码解析:

定义都在NSKeyValueCoding.h中

主要两个方法:

//key为当前类的属性名

- (id)valueForKey:(NSString *)key;  //当类没有名为key的属性时会调用抛出异常,可以复写valueForUndefinedKey:方法,作处理

- (void)setValue:(id)value forKey:(NSString *)key;//当类没有名为key的属性时会调用抛出异常,可以复写- (void)setValue:(id)value forUndefinedKey:(NSString *)key:方法,作处理



//keyPath 为访问属性的路径,比如:@"person.name",person是当前类的属性,name是person类的一个属性名

- (id)valueForKeyPath:(NSString *)keyPath;

- (void)setValue:(NSValue *)value forKeyPath:(NSString *)keyPath;

 

异常处理

- (id)valueForUndefinedKey:(NSString *)key;

- (void)setValue:(id)value forUndefinedKey:(NSString *)key

 

代码举例:

@interface ViewController () 

@property (nonatomic, weak) NSString *viewString;

@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    NSLog(@"----[%@]",[self valueForKey:@"viewString"]);

    NSLog(@"----[%@]",[self valueForKey:@"viewArray"]); 

    [self setValue:@"testForViewString" forKey:@"viewString"];

    [self setValue:@"1" forKey:@"viewArray"];

 }


- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
    NSLog(@"【warning】!!!!!!---Undefined--key[%@]--!!!!!!",key);
}


- (id)valueForUndefinedKey:(NSString *)key {
    if ([key isEqualToString:@"viewArray"]) {
        return @"aaaa";
    }
    else {
        return [super valueForUndefinedKey:key];
    }
}

 

实现原理

参考 http://www.tuicool.com/articles/M7vQRj

感谢这篇文章,写的很详细

但有个疑问:

虽然说这几个方法一般不会去调用或者用到,但是我尝试了一下,系统并没有调用这些方法,而是直接走到了

- (id)valueForUndefinedKey:(NSString *)key




    本文转自 咖啡机(K.F.J)   博客园博客,原文链接:http://www.cnblogs.com/strick/p/4046434.html,如需转载请自行联系原作者



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值