iOS KVC内部执行顺序

最近面试被虐的体无完肤,特意回来恶补了一些基础的知识。

KVC (Key-value coding)键值编码,指的是在iOS开发中,开发者可以通过Key名直接访问对象的属性,或者给对象的属性赋值,而不需要调用明确的存取方法,这样就可以在运行的时候动态的访问和修改对象的属性,而不是在编译时确定,也这是iOS开发中的黑魔法之一,很多高级的iOS开发技巧都是基于KVC。

上面说的是关于KVC的基本定义。下面说一下kvc实际中的执行方法。

当调用setvalue: forKey时 底层调用顺序如下:

①优先调用set方法 如果有该方法 在setter 方法中完成设置

②当五set方法时,kvc机制会检查+(bool)accessInstanceVariablesDirectly;是否返回YES。当你重写了该方法并且返回的时No时 kvc机制会直接执行setValue:forUndefinedKey:啊这样做可以让你的类不被别人使用kvc;

③一般情况开发者不会重写+(bool)accessInstanceVariablesDirectly方法 所以kvc 会搜索有没有名称为_的成员变量。无论是在.h还是在.m部分定义也无论是使用了什么访问修饰符只要存在_成员变量都可以对其成员变量进行赋值。

④如果该类中没有set,也没有_成员变量,kvc机制会搜索_is成员变量。

⑤如果该类还是没有_ 也没有_is kvc 会继续搜索,is再给它们赋值。

⑥如果都不存在 系统将会执行setValue:forUndefinedKey 抛出异常。


对于setValue:forUndefinedKey 抛出异常的处理

一般重写该方法即可

你可能感兴趣的:(iOS KVC内部执行顺序)