美文网首页
KVC(NSKeyValueCoding):

KVC(NSKeyValueCoding):

作者: nalis风 | 来源:发表于2016-07-19 02:42 被阅读17次

setValue:属性值 forKey:属性名: 为指定属性设置值

valueForKey:属性名: 获取指定属性的值

[p setValue:@"小麦" forKey:@"_name"];

NSLog(@"%@",p.name);

KVC setValue: forKey: 执行机制:

1.优先考虑调用“setName:属性值;” 代码通过setter 方法完成设置

2.如果没有setName KVC搜索该类名为_name的成员变量,无论该成员变量实在类接口部分定义,还是在类实现部分定义,也无论用哪个访问控制符修饰,这条KVC代码底层实际上就是对_name成员变量赋值

3.若1 2 皆无 搜索名为name,无论该成员变量实在类接口部分定义,还是在类实现部分定义,也无论用哪个访问控制符修饰,这条KVC代码底层实际上就是对name成员变量赋值

4.1 2 3 都没有找到 执行该对象的setValue:forUndefinedKey:,此方法的默认执行是为了引发一个称为 NSUnknownKeyException的异常

valueforKey@"name"底层执行机制:

1.优先getter方法

2.否则搜索类名为_name的成员变量,如set...般不考虑权限

3.否则搜索name

4.否则执行valueforUndefinedKey:方法

NSUnknownKeyException方法的重写,不需要声明。//设置部分

-(void) setValue:(id) value forUnderfinedKey: (id) Key{

//自定义语句

}

-(void)valueForUndefinedKey:(id)key{

//自定义语句

}

OC中并不存在绝对隐藏的方法,既是一个方法仅仅在类实现部分定义,类接口部分没有定义,也可通过NSObject提供的performSelector:或 performSelector:withObject:方法调用。

KVC处理nil值:

int 等类型无法接受nil 可以重写setNilValueForKey:方法

-(void) setNilValueForKey:(id)key

{

//自定义语句

[super setNulValueForKey: key];

}

Key路径:

除了操作对象的属性之外,还可操作对象的"符合属性"  所谓“复合属性“,KVC机制将其称为Key路径,比如

为实例提供直接操作类属性成员变量中的成员变量

setValue:forKeyPath: 根据Key路径设置属性名

valueForKeyPath: 根据Key路径获取属性值 设置复合属性时,需要用到ForKeyPath而不是ForKeyPath

[u setValue:[[FKPreson alloc] init] forKey:@"p"];//使用的时候要把类对象初始化

[u setValue:@"小麦" forKeyPath:@"p.name"];

NSLog(@"%@",[u valueForKeyPath:@"p.name"]);

性能比setter getter差,但是灵活性高。

相关文章

  • kvc

    kvc 底层驱动NSKeyValueCoding 协议 NSKeyValueCoding Getting Valu...

  • KVC(NSKeyValueCoding):

    setValue:属性值 forKey:属性名: 为指定属性设置值 valueForKey:属性名: 获取指定属性...

  • KVC

    KVC(NSKeyValueCoding) 常用的KVC方法:setValue: forKey:与setValue...

  • KVC与NSKeyValueCoding

    KVC全称是Key Value Coding,在NSKeyValueCoding.h非正式协议文件中,声明了KVC...

  • KVC-NSKeyValueCoding

    KVC作为OC中重要的编程思想、在很多场景下我们都会使用,也是开发者必须掌握的基础知识。那么什么是KVC,他的实现...

  • KVC原理分析

    一、KVC简介   KVC(Key-Value Coding)键值编码,是利用NSKeyValueCoding 非...

  • ReactiveCocoa 前奏 KVC. KVO. NSNot

    KVC KVC (key-value observing) 是基于 NSKeyValueCoding 的一个非正式...

  • KVC&KVO

    KVC Key value coding 键值对编程OC中KVC相关方法都放在NSKeyValueCoding类别...

  • OC-KVC

    KVC是什么 kvc就是Key-Value Coding(键值编码)。 键值编码是NSKeyValueCoding...

  • iOS面试题

    一:KVC和KVO原理 KVC,即是指 [NSKeyValueCoding],一个非正式的 Protocol,提供...

网友评论

      本文标题:KVC(NSKeyValueCoding):

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