KVC&KVO面试题

作者: 为之_iOS | 来源:发表于2015-08-11 20:02 被阅读1586次

人生就是一场战斗

KVC(Key-Value Coding)键值编码

1.1如何调用私有变量?如何修改系统的只读属性?KVC的查找顺序?
KVC在某种程度上提供了访问器的替代方案。但访问器是个很好的东西,以至于KVC在都会在访问器存在的情况下使用访问器实现存取值。

待精深理解
为了设置或者返回对象属性,KVC按顺序使用如下技术:
①检查是否存在-<key>、-is<key>(只针对布尔值有效)或者-get<key>的访问器方法,如果有可能,就是用这些方法返回值;
检查是否存在名为-set<key>:的方法,并使用它做设置值。对于 -get<key>和 -set<key>:方法,将大写Key字符串的第一个字母,并与Cocoa的方法命名保持一致;
②如果上述方法不可用,则检查名为-_<key>、-_is<key>(只针对布尔值有效)、-_get<key>和-set<key>:方法;
③如果没有找到访问器方法,可以尝试直接访问实例变量。实例变量可以是名为:<key>或
<key>;
④如果仍为找到,则调用valueForUndefinedKey:和setValue:forUndefinedKey:方法。这些方法的默认实现都是抛出异常,我们可以根据需要重写它们。

1.2什么是键-值,什么是键路径?
模型的性质是通过一个简单的键(通常是个字符串)来指定的。视图和控制器通过键来查找相应的属性值。在一个给定的实体中,同一个属性的所有值具有相同的数据类型。键-值编码技术用于进行这样的查找—它是一种间接访问对象属性的机制。
键路径是一个由用点作分隔符的键组成的字符串,用于指定一个连接在一起的对象性质序列。第一个键的性质是由先前的性质决定的,接下来每个键的值也是相对于其前面的性质。键路径使您可以以独立于模型实现的方式指定相关对象的性质。通过键路径,您可以指定对象图中的一个任意深度的路径,使其指向相关对象的特定属性。

1.3什么是KVC?什么是KVO?
KVC内部实现:一个对象调用setValue的时候:1首先根据方法名找打运行方法所需要的环境参数。2他会从自己isa指针结合环境参数,找到具体的方法实现的接口。3再直接查找得来的具体的方法实现。
KVO内部实现:当为某一个对象属性注册监听的时候,该对象的isa指针就会指向一个中间类,而不是本来对象真实的类。所以说,对象的isa指针可以改变,我们的程序最好不要依赖isa指针。

1.4KVO的实现机制?
当某个类的对象在第一次被观察时,系统会在运行时动态创建一个该类的派生类,在该派生类中重写setter方法真正实现通知机制;派生类重写了 class 方法以“欺骗”外部调用者它就是起初的那个类。然后系统将这个对象的isa指针指向这个新诞生的派生类,因此这个对象就成为该派生类的对象了,因而在该对象上对setter的调用就会调用重写的setter,从而激活键值通知机制。此外,派生类还重写了dealloc方法来释放资源。

1.5KVO的使用场景
KVO用于监听对象属性的改变。
1下拉刷新、下拉加载监听UIScrollView的contentoffsize;
2webview混排监听contentsize;
3监听模型属性实时更新UI;
4监听控制器frame改变,实现抽屉效果。

感谢@zzz。

相关文章

  • KVC&KVO面试题

    人生就是一场战斗 KVC(Key-Value Coding)键值编码 1.1如何调用私有变量?如何修改系统的只读属...

  • KVC&KVO

    一.KVC 1.KVC即Key-value coding Key-value coding is a mechan...

  • KVC&KVO

    基本概念 KVC (Key-value coding) C#中可以通过反射读写一个对象的属性,有时候这种方式特别方...

  • KVC&KVO

    KVC(key-value coding) 概要 KVC允许开发者通过名字访问属性,无需调用明确的存取方法,这样开...

  • KVC&KVO

    KVC(Key Value Coding) 既是指NSKeyValueCoding,提供一种机制来间接访问对象的属...

  • iOS【KVC&KVO】

    kvc 1. KVC 1.1 KVC概念 KVC全称是Key Value Coding,定义在NSKeyValue...

  • KVC&KVO(1)

    键值编码的优点: 基于配置的属性访问。 降低耦合性。 简化代码。使用键值编码更新模型的状态。

  • OC语法:KVO的底层实现

    一、KVO是什么二、怎么使用KVO三、KVO的底层实现四、KVO常见面试题 一、KVO是什么 KVO全称Key-V...

  • KVO使用与原理分析

    面试题目 iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)如何手动触发KVO? 上面两道面试题目,...

  • 面试题(2)

    runtime/KVO等面试题 1.KVO内部实现原则 回答:1>KVO是基于runtime机制实现的 2>当某个...

网友评论

本文标题:KVC&KVO面试题

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