IOS开发-KVC
2023-02-18 16:47:22 时间
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
相关文章
- 【黄啊码】如何用小程序实现世界杯参赛队伍投票
- 《Android App开发进阶与项目实战》资源下载和内容勘误
- 微信小程序使用阿里巴巴的矢量图标iconfont
- 微信小程序 点击显示隐藏 极简Tab标签 点击添加class样式
- 微信小程序 wx:if 与 hidden区别
- 微信小程序 CSS border-radius元素 overflow:hidden失效问题 iPhone ios 苹果兼容问题
- 微信小程序 自定义 tabBar案例 官方案例迁入无效解决方法 非 tab 页显示 tabBar的问题解决 自定义tabBar与原生tabBar以及自写伪tabbar的区别
- IOS APPStore 上传更新应用版本 软件
- Android - NETD解读
- 【Android自定义控件】不用ScrollView实现上下两屏滑动
- Android实现TextView跑马灯效果
- Android进程间通信(一)- Bundle
- Android进程间通信(二)- Messenger
- 微信小程序实现上拉和下拉加载更多
- 微信小程序 scroll-view 完成上拉加载更多
- 微信小程序实现tabs选项卡
- java和vue学生定位打卡小程序人脸识别打卡系统源码网站学生考勤系统
- Java疫苗预约小程序线上疫苗预约系统
- 移动研发提效?小程序容器技术来帮忙!
- 微信小程序(一)自定义导航栏和fixed失效及各机型兼容问题