版权声明:本文为博主原创文章,未经博主允许不得转载。
KVC
KVC是Key-Value-Coding的缩写
意思指 用Key和Value来编写代码。
核心思想是对象均由很多个Key组成,对对象的操作全部落实到Key上。
我们写的OC对象都有自己的实例变量(有可能随属性自动附带)。
KVC便指不通过setter和getter方法来获取实例变量的值,而是用实例变量的名字来获取值.
KVC不仅能代替setter和getter方法,还能无视readonly标记的属性。
如果这个属性是有同名实例变量,并且它是readonly,那么KVC即可无视只读,来实现修改该属性
以下是KVC常用用法:
//**********设置值*********
[obj setValue:value forKey:@“key”];
[obj setValue:value forKeyPath:@“key.subKey.subSubKey”];
//取值
[obj valueForKey:@“key”];
[obj valueForKeyPath:@“key.subKey,subSubKey”];//如果subKey对应是一个对象,该方法可以获取改对象的subSubKey的值
[obj valueForKey:@“key.subKey”];//如果keys是一个数组,该方法可以提取数组中每一个成员的subKey的值合成一个新的数组返回出来
//********数学计算*********
[obj valueForKeyPath:@“key.@sum.valueKey”];//如果keys是一个数组,则提取所有valueKey的值加起来返回.
[obj valueForKeyPath:@“key.@avg.valueKey”];//如果keys是一个数组,则提取所有valueKey的值取平均值返回.```
##KVO
`KVO是Key-Value-Observer的缩写,全名观察者模式。`
>它是一个基于KVC的事件回掉方式
KVO和KVC不是同一个层次的东西,因为他们的目的不一样,所以面试官问起他们的区别。你们别只回答 字母不一样。应该回答:压根就没有什么可比较的,因为实现目的就不一样。
`KVO是指 添加一个第三方观察者,去监视一个Key的Value是否有变化,当Key的Value变化后,就会执行一个方法中的代码。
KVO大量消耗系统资源,如果你想在事件回调中使用KVO,可以参考那篇文章(事件回调)。`