KVC

作者: Gunks | 来源:发表于2018-04-14 17:17 被阅读0次

1.关于KVC setValue: forKey: 的调用顺序

    [p setValue:@"20" forKey:@"age"];

先找两个set方法

首先会访问该类的setage方法,其次setisage方法    ~~**优先级前者更高**~~
这两个方法没有会去找accessInstanceVariablesDirectly方法
    如果返回YES,会去找4个成员变量的setter方法
    如果返回NO,就不会去找成员变量
    最后一个保险会去找setvalue:forUndefinedKey:这个方法
    如果有就执行这个方法里面的代码
    再没有那就会抛出异常了

2.关于KVC valueForKey:key 的调用顺序

- 先调用相关方法,先后顺序是
    - getter方法:getKey(Key首字母大写)  -> key -> isKey
    - NSArray方法:countOfName 和objectInNameAtIndex 方法
- 如果没有相关方法: 看+(BOOL)accessInstanceVariablesDirectly 返回值
    - 返回值是YES 先后顺序 _key ->_isKey ->key ->isKey
    - No valueForUndefinedKey:key 重写该方法
        - 最后抛出异常

3.如何让KVC不去找成员变量?

//通知KVC不访问我的成员变量
+(BOOL)accessInstanceVariablesDirectly{
    return NO;
}

将该类的accessInstanceVariablesDirectly的返回值设置成NO就不会去找成员变量了

  • 如果这两个方法都没有,会去找该类的成员变量


一共会去找4个成员变量

  • 优先级
    _age > _isAge > age > isAge
@interface Person : NSObject
{
    NSString * _age;
    NSString * _isAge;
    NSString * age;
    NSString * isAge;
}

如果有就匹配,没有就会报错了


属性的本质:setter getter 成员变量


属性有3个get方法

-(NSString *)name{
    return @"Gunks";
}

-(NSString *)getName{
    return @"getGunks";
}

-(NSString *)isName{
    return @"isGunks";
}




注:

@property(nonatomic,assign) int age;
    Person * p = [[Person alloc]init];
    [p setValue:nil forKey:@"age"];

这种情况会提示

could not set nil as the value for the key age

解决方案

- (void)setNilValueForKey:(NSString *)key{
    NSLog(@"不能将%@设置为空",key);
}
 NSException *exception = [NSException exceptionWithName:@"ZXKVO exception" reason:@"must be NSObject type" userInfo:nil];
    @throw exception;

相关文章

  • 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的简单使用

    KVC字典转模型 KVC 中经常使用的就是字典转模型 KVC的大招 KVC设置对象属性及取值 KVC间接设置对象属...

网友评论

      本文标题:KVC

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