搜索
简帛阁>技术文章>IOS开发-KVC

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

 

1什么是kvckvckeyvaluecoding,健值编码可以通过key直接访问对象属性的value的方法2使用场景kvc主要是为了让代码变的更简介明了用的比较多的是在后台数据解析,还有访问一些
IOSKVC的使用方法实例详解KVC是KeyValueCoding的缩写,意思是键值编码。在iOS中,提供了一种方法通过使用属性的名称(也就是Key)来间接访问对象的属性方法。说的有的拗口,实际上就
iOSKVC、KVO、NSNotification、delegate总结及区别1、KVC,即是指NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性。而
一、KVC介绍KVC(Keyvaluecoding)键值编码,就是指iOS开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值。而不需要调用明确的存取方法。这样就可以在运行时动
来源:http://wwwcnblogscom/jaydong/archive/2012/12/13/2815778html熟悉oc语法的同学也许都会懂得这么一点:在oc中,类的成员变量或是方法是没有
一、什么是kvo?keyvalueobserving,观察者模式观察者,观察对象属性的变化,当被观察者该属性发生变化时,观察者会接收到通知,可以在回调函数中做相应的处理二、有什么作用?变化处理操作可以
IOS开发几种截屏方法1UIGraphicsBeginImageContextWithOptions(pageViewpageboundssize,YES,zoomScale);[pageViewp
iOSAPP开发的发展前景如何?进入新的一年,不仅竞争越来越激烈,而且技术环境也在发生变化。IOSAPP的发展现状主要是受市场影响,一些客观因素影响了整体运营。但是,在了解了市场规模之后,便会迅速进行
公司来了大牛是绝好的学习机会今天分享了我们一个代码规范比如UITableViewCell1首先根据这个cell需要的数据源建一个数据model,只针对于该cell好处:数据独立化2对于cell里面的实
导入框架:import<AVFoundation/AVFoundationh>声明全局变量:@interfaceViewController()<AVAudioRecorderDel