知识点总结

iOS KVC

2019-04-11  本文已影响15人  飞不越疯人院

1. 什么是KVC

KVC 全称Key-Value coding;是APPLE给我们提供的一种键值编码机制;
相关的方法:

 ///直接通过Key来取值
- (nullable id)valueForKey:(NSString *)key;   
///通过Key来设值                      
- (void)setValue:(nullable id)value forKey:(NSString *)key;    
///通过KeyPath来取值      
- (nullable id)valueForKeyPath:(NSString *)keyPath;              
///通过KeyPath来设值    
- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;  

2. KVC取值的流程:

当调用valueForKey:@"name", 即keyname时;

  1. 首先查找是否有相应的getter方法, 如果有,则直接执行;

查找getter方法的顺序 getName>name>isName, 如果查到则直接调用, 基本数据类型封装成NSNumber;

  1. 如果没有相应的getter方法, 则查找是否有相应(同名或相似)的实例变量;

同名或者类似的成员变量,名字均可_name, _isName, name, isName;
注意:+ (BOOL)accessInstanceVariablesDirectly;这个方法, 此方法默认返回YES(允许查找同名成员变量); 如果设置为NO(即使有同名成员变量也不能获取到相应的值)

  1. 如果均不能查找到则调用valueForUndefinedKey:方法, 然后抛出NSUndefinedKeyException的未定义key异常;

3. KVC赋值的流程:

当调用setValue:@"value" forKey:@"name", 即keyname时;

  1. 查找是否有相关的setter方法, 如果有, 则直接执行;
  2. 如果没有相应的setter方法, 则查找是否有相应(同名或相似)的实例变量;

同名或者类似的成员变量,名字均可_name, _isName, name, isName;
注意:+ (BOOL)accessInstanceVariablesDirectly;这个方法, 此方法默认返回YES(允许查找同名成员变量); 如果设置为NO(即使有同名成员变量也不能进行赋值)

  1. 如果均不能查找到则调用setValue:forUndefinedKey:方法, 然后抛出NSUndefinedKeyException的未定义key异常;

参考资料
iOS KVC和KVO详解

上一篇下一篇

猜你喜欢

热点阅读