KVC使用分析
2022-08-29 本文已影响0人
ios小喽喽
KVC即Key-Value Coding,来自于 Foundation框架: 意思键-值编码,键值编码机制是一种由NSKeyValueCoding非正式协议启用的机制,通过这个协议可以间接访问OC对象的属性。当一个对象符合键值编码时,它的属性可以利用字符串参数来寻址,通过一个简洁、统一的消息传递接口。这种间接访问机制补充了实例变量及其关联的访问方法所提供的直接访问
一:KVC 取值
1、通过setValue:forkey: 来改变值:
![](https://img.haomeiwen.com/i1534714/5858b2a6b15a465a.png)
2、改变数组的值:
![](https://img.haomeiwen.com/i1534714/e7391ffebf9af4b3.png)
3、通过[NSValue valueWithBytes:&sv objCType:@encode(CarShopingValue)]
![](https://img.haomeiwen.com/i1534714/834d44f1d5b49ae9.png)
4、通过keyPath
![](https://img.haomeiwen.com/i1534714/77272553f7c61ced.png)
5、数组取值:
![](https://img.haomeiwen.com/i1534714/334e9c199ee7edeb.png)
6、字典取值:
![](https://img.haomeiwen.com/i1534714/50e8c74e2b62d99b.png)
7、 KVC消息传递
![](https://img.haomeiwen.com/i1534714/ab6867fcad63f7c5.png)
8、 聚合操作符 @avg、@count、@max、@min、@sum
![](https://img.haomeiwen.com/i1534714/c819821901c6090d.png)
9、数组操作符 @distinctUnionOfObjects(去重) @unionOfObjects
![](https://img.haomeiwen.com/i1534714/08bc41afae13095d.png)
二:取值原理
1、accessInstanceVariablesDirectly必须设置为YES才能进行赋值
![](https://img.haomeiwen.com/i1534714/8e0d4e5df3c0ed8b.png)
2、取值流程:先走set方法->然后再走_<key> -> _is<key> -><key> ->iskey
![](https://img.haomeiwen.com/i1534714/6e7c5df0b9f338f7.png)
![](https://img.haomeiwen.com/i1534714/c3ba84db02b8c01a.png)
从上面中可以看出我的set方法打开会走set方法
3、我关闭set方法:
![](https://img.haomeiwen.com/i1534714/cd90a58a81265bb4.png)
![](https://img.haomeiwen.com/i1534714/56e4a4272f698d4d.png)
当我关闭set方法的时候会走到_name,后续就不打印了