KVC初步

作者: 每日总结 | 来源:发表于2016-03-04 09:40 被阅读47次

KVC是一种非常方便的给各种自定义类的属性赋值的方式

@interface Person : NSObject
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *gender;
@end

@class Person;
@interface Earth : NSObject
@property (nonatomic, retain) Person *person;
@end 

-(void)setValue:forKey://Key是实例变量的变量名

Person *p = [[Person alloc] init];
[p setValue:[NSString stringWithFormat:@"Archer"] forKey:@"name"];  
Earth *earth = [[Earth alloc] init];
[earth setValue:p forKey:@"person"];  

-(id)valueForKey:

NSString *st = [p valueForKey:@"name"];

-(id)valueForKeyPath://点语法表示路径

NSString *pN = [earth valueForKeyPath:@"person.name"];

-(void)setValue:forKeyPath:

[earth setValue:@"Smith" forKeyPath:@"person.name"];

-(void)setValuesForKeysDictionary://以字典里的key作key,以字典里的value做value,这是一种快捷写法

NSDictionary *pD = [[NSDictionary alloc] initWithObjectsAndKeys:@"Mary",@"name",@"W",@"gender",nil];
[p setValuesForKeysDictionary:pD];   

-(void)setValue:forUndefinedKey://如果输入的key和变量名以及其变体(key,_key,isKey,_isKey)不同,就会崩溃,如果想要通过这样的key访问,就需要重写Undefined方法
-(id)valueForUndefinedKey:

@implementation Person

-(void)setValue:(id)value forUndefinedKey:(NSString*)key{
    if ([key isEqualToString:@"name1"]) {
        self.name = value;
    }else if ([key isEqualToString:@"gender1"]) {
        self.gender = value;
    }
}
-(id)valueForUndefinedKey:(NSString*)key {
    if ([key isEqualToString:@"name1") {
        return _name;
    }else if ([key isEqualToString:@"gender1"]) {
        return _gender;
    }
@end

实现机制

1.setName: kvc赋值首先在类中查找set+Key:名字的方法;如果类中不存在这样的方法,转2
2.在类中查找和(_key、_isKey、key、isKey)相同的实例变量;如果实例变量不存在,转3
3.进入Undefined方法,需要自行重写setValue:forUndefinedKey:和valueForUndefinedKey:

相关文章

  • KVC初步

    KVC是一种非常方便的给各种自定义类的属性赋值的方式 -(void)setValue:forKey://Key是实...

  • KVC详解

    KVC 目录结构KVC定义KVC取值和设置KVC使用keyPathKVC处理字典KVC作用 参考:iOS KVC和...

  • iOS原理篇(二): KVC实现原理

    KVC实现原理 什么是 KVC KVC基本使用 KVC 原理 总结 一 、 什么是KVC KVC的全称是Key-V...

  • iOS 关于KVC的一些总结

    本文参考: KVC官方文档 KVC原理剖析 iOS KVC详解 KVC 简介 KVC全称是Key Value Co...

  • KVC,KVO

    KVC , KVO KVC和KVO的区别及应用 KVC/KVO原理 1. KVC键值编码 KVC,即是指NSKey...

  • iOS 关于KVC的一些总结(转)

    原文:iOS 关于KVC的一些总结 本文参考: KVC官方文档 KVC原理剖析 iOS KVC详解 KVC 简介 ...

  • OC语法:KVC的底层实现

    一、KVC是什么二、怎么使用KVC三、KVC的底层实现四、KVC常见面试题 一、KVC是什么 KVC全称Key-V...

  • 19.iOS底层学习之iOS底层学习之KVC

    本篇提纲1、KVC的基本介绍2、KVC的API3、KVC的写入过程4、KVC的读取过程5、自定义KVC KVC的基...

  • iOS【KVC&KVO】

    kvc 1. KVC 1.1 KVC概念 KVC全称是Key Value Coding,定义在NSKeyValue...

  • ios开发UI篇—Kvc简单介绍

    一、KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC...

网友评论

    本文标题:KVC初步

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