iOS开发之KVC底层原理

前言

KVC全称KeyValueCoding,称作键值编码。
KVC的方法定义在Foundation框架下的NSKeyValueCoding.h文件下。Foundation为我们提供了NSObject、NSArray、NSDictionary、NSMutableDictionary、NSOrderedSet、NSSet关于KeyValueCoding的分类。也就是说,只有这几个类及其子类,才能使用KVC的方法。KVC的常用方法是根据key进行取值和设值操作,具体如下:

 1. -(nullable id)valueForKey:(NSString *)key;
 2. -(void)setValue:(nullable id)value forKey:(NSString *)key;

这两个方法根据上述类型不同,具体功能也不同,将分三个模块介绍:

一 NSObject

-(void)setValue:(nullable id)value forKey:(NSString *)key 流程具体如下图,死记硬背即可:
KVC的设值原理
-(nullable id)valueForKey:(NSString *)key具体流程如下图,死记硬背:
KVC的取值原理

二 NSDictionary、NSMutableDictionary

NSDictionary是不可变字典,初始化后value就不可以改变,所以NSDictionary只有valueForKey:,没有setValue:ForKey:。而NSMutableDictionary同时拥有setValue:ForKey:和valueForKey:。
而setValue:ForKey:的实现是调用NSMutableDictionary的-setObject:forKey: ,如果value是nil,那么调用-removeObjectForKey:,valueForKey:是调用NSDictionary、NSMutableDictionary的-objectForKey: 。

三 NSArray、NSOrderedSet、NSSet

1)这三个类调用-setValue:forKey:时,数组或集合中的每个元素都会调用-setValue:forKey:
2)这三个类调用-valueForKey:时,数组或集合中的每个元素都会调用-valueForKey:,但是返回值略有不同:
1. NSArray:每个元素都调用-valueForKey:,返回值为NSArray。如果某个元素调用-valueForKey:返回nil,则数组中对应的元素为NSNull;
2. NSSet:每个元素都调用-valueForKey:,返回值为NSSet。在返回的NSSet中,nil值会被忽略,且相同的元素只出现一次。
3. NSOrderSet:每个元素都调用-valueForKey:,返回值为NSOrderSet。在返回的NSSet中,nil值会被忽略,且相同的元素只出现一次。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值