美文网首页
4.1 KVC/KVO —— KVC简单介绍

4.1 KVC/KVO —— KVC简单介绍

作者: 哈库呐玛塔塔__ | 来源:发表于2020-05-13 02:24 被阅读0次

KVC是一种可以通过字符串的名字(key)来访问类属性的机制。而不是单单通过调用Setter、Getter方法访问。

KVC的定义全部都是通过对NSObject的一个叫做NSKeyValueCoding的类别的扩展来实现的,所以对于所有继承于NSObject的类都可以使用KVC。(基本数据类型或者结构体,需要通过转换成NSNumber和NSValue)

最重要的四个方法:

valueForKey、valueForKeyPath; setValue ForKey、setValue ForKeyPath。

NSKeyValueCoding类别中其他的一些方法:

+ (BOOL)accessInstanceVariablesDirectly; 

//默认返回YES,表示如果没有找到set<Key>/get<Key>方法的话,会按照_key,_iskey,key,iskey的顺序搜索成员,设置成NO就不这样搜索 ,只会判断是否找到了set<Key>/get<Key>方法,如果没有找到则会调用setValue:forUndefinedKey:或者valueForUndefinedKey:方法

- (BOOL)validateValue:(inout id __nullable * __nonnull)ioValue forKey:(NSString *)inKey error:(out NSError **)outError;

 //KVC提供属性值正确性验证的API,它可以用来检查set的值是否正确、为不正确的值做一个替换值或者拒绝设置新值并返回错误原因。需要手动调用。

- (NSMutableArray *)mutableArrayValueForKey:(NSString *)key; 

//这是集合操作的API,里面还有一系列这样的API,如果属性是一个NSMutableArray,那么可以用这个方法来返回。 

数组属性直接调用addObject方法并不能调用KVO的监听方法,但是mutableArrayValueForKey:方法获取的array,调用addObject方法是可以调用到KVO的监听方法的

- (nullable id)valueForUndefinedKey:(NSString *)key;

 //如果Key或者keyPath不存在,且没有KVC无法搜索到任何和Key有关的字段或者属性,则会调用这个方法,默认是抛出异常。通常我们通过重写这个方法(一般是NSLog(key)),来避免程序崩溃。

(按照set<Key>/get<Key>  、  _key 、 _isKey 、  key 、 isKey都无法搜索到)

- (void)setValue:(nullable id)value forUndefinedKey:(NSString *)key; 

//和上一个方法一样,但这个方法是设值。

- (void)setNilValueForKey:(NSString *)key; 

//当通过KVC给某个非对象的属性赋值为nil时,则会调用这个方法。值类型是不能为nil的

- (NSDictionary<NSString *, id> *)dictionaryWithValuesForKeys:(NSArray<NSString *> *)keys; 

//输入一组key,返回该组key对应的Value,再转成字典返回,用于将Model转到字典。

参考文章:

https://blog.csdn.net/changcongcong_ios/article/details/76658854

https://www.jianshu.com/p/b9f020a8b4c9

https://www.jianshu.com/p/1d39bc610a5b

https://www.jianshu.com/p/45cbd324ea65

相关文章

  • 4.1 KVC/KVO —— KVC简单介绍

    KVC是一种可以通过字符串的名字(key)来访问类属性的机制。而不是单单通过调用Setter、Getter方法访问...

  • KVC

    iOS 如何使用KVC iOS开发UI篇—Kvc简单介绍 iOS开发系列--Objective-C之KVC、KVO

  • 说一下KVC和KVO

    本篇采用简单的例子,来介绍 iOS 中的 KVC 和 KVO 的用法和实现原理。 一、KVC 1. KVC是什么 ...

  • KVC,KVO

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

  • KVC、KVO的本质

    这篇文章介绍KVC、KVO的本质。如果你对KVC、KVO不了解,推荐先查看其用法:KVC和KVO学习笔记[http...

  • KVC、KVO

    KVC、KVO探识(一)KVO和KVO的详细使用 KVC、KVO探识(二)KVC你不知道的东西 KVC、KVO探识...

  • KVC-KVO

    https://github.com/leejayID/KVC-KVO 此文章详细介绍了KVC和KVO的使用,适合...

  • 关情纸尾---UIKit基础-简述KVC和KVO

    ♥概述 ♥键值编码KVC ♥点语法和KVC ♥ 键值监听KVO ♥KVO的使用步骤也比较简单:

  • KVC KVO高阶应用

    KVC KVO高阶应用 KVC KVO高阶应用

  • iOS中KVC及KVO的简单理解

    一、KVC及KVO的介绍 KVC:即Key-Value-Coding,用于键值编码。KVO:即Key-Value-...

网友评论

      本文标题:4.1 KVC/KVO —— KVC简单介绍

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