当前位置: 首页 > news >正文

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];
    }
}
复制代码

 

相关文章:

  • 关于FPS游戏痕的问题
  • ajax技术
  • Vue.js学习系列(二十五)-- 循环语句(一)
  • 多线程下载(转)
  • 开源加密解密库比较
  • 某道Pwn(格式化字符串漏洞)
  • 深入分析java web技术内幕----读书笔记(六)
  • 阻塞、非阻塞、同步、异步浅析
  • JqERY
  • BZOJ 4756 线段树合并(线段树)
  • 给自定义tabBar的按钮添加点击放大缩小的动画
  • idea 实现热部署
  • Advanced Auto Layout:Working with Self-Sizing Table View Cells
  • 震精 - PostgreSQL 单机3.9 万亿/天(计数器、序列、自增)
  • 什么是 SHTML
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Angular6错误 Service: No provider for Renderer2
  • Github访问慢解决办法
  • Git的一些常用操作
  • golang中接口赋值与方法集
  • JAVA 学习IO流
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript的使用你知道几种?(上)
  • MobX
  • python docx文档转html页面
  • python 装饰器(一)
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • uva 10370 Above Average
  • Vue 2.3、2.4 知识点小结
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 浮动相关
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 日剧·日综资源集合(建议收藏)
  • 运行时添加log4j2的appender
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • C# - 为值类型重定义相等性
  • Spring Batch JSON 支持
  • ###C语言程序设计-----C语言学习(3)#
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #WEB前端(HTML属性)
  • ${ }的特别功能
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (python)数据结构---字典
  • (编译到47%失败)to be deleted
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (三)elasticsearch 源码之启动流程分析
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)程序员疫苗:代码注入
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET Framework .NET Core与 .NET 的区别
  • .Net Web窗口页属性