浅谈KVC

作者: Horson19 | 来源:发表于2018-09-18 16:37 被阅读8次

KVC是key-value-coding的缩写,顾名思义就是键值对编码的意思。

KVC其中包含两个两个方法,-(id)valueForKey:(NSString*)key;与-(void)setValueForKey:(NSString*)key;当然还有其他两个keyPath的方法,keyPath更牛逼,功能更强大,其中还可以使用点语法,这里就不详细说明了。

KVO内部的实现原理其实就是:有方法找方法,没方法找成员变量,什么都没有就抛异常,今天写了一个自定义KVC的Demo有兴趣可以去我的github上下载。

总结一下KVO中GETTER方法查找方法的关键字顺序(满足驼峰原则)1.getKey,2.key,3.isKey。Setter方法的查找顺序1.setKey,2.setIsKey 。查找成员变量的关键字顺序:_key,_isKey,key,isKey。通过自己实现的KVO可以更改这些规则,达到项目中便捷操作的需求。

KVC内部的流程:1.查找对象内部的相关方法(满足上述方法名的查找),如果找到了直接调用方法赋值、取值,如果没找到进行步骤2。

2.调用对象内部的accessInstenceVariablesDirectly(是否允许直接访问成员变量)方法,该方法如果返回YES,则进行步骤3,否则调用对象内部valueForUndefindKey:方法,进行相应异常抛出处理

3.如果accessInstenceVariablesDirectly返回值为YES,则进行对象内成员变量的遍历(包括私有变量),按照上述的名称查找规则进行成员变量的查找,如果找到了则赋值,没有找到则调用valueForUndefindKey:方法抛出相应Exception异常。

以上就是KVC的内部实现机制,需要注意的是,因为KVC只要知道变量名,是可以直接访问一个类对象的全部成员变量的,包括私有变量,本质上其是破坏的面向对象编程的设计原理的,所以系统提供了一个保证我们私有变量安全的方法就是上述中提到的accessInstenceVariablesDirectly方法,若我们创建的类不希望被KVC访问到成员变量,则可以重写该方法返回NO,这样就保证了类内部的安全性,也保证了面向对象编程的设计准则。

本文由作者原创,未经允许不得转载

相关文章

  • iOS-KVO浅谈

    上一篇:iOS-KVC浅谈 前言:KVO 作为 KVC 的同袍兄弟,功能更强大,聊聊 KVO。 一、KVO 简介 ...

  • 浅谈 KVC

    简介 KVC 是 KeyValue Coding 的简称,遵循 NSKeyValueCoding 协议,它是一种可...

  • 浅谈KVC

    KVC是key-value-coding的缩写,顾名思义就是键值对编码的意思。 KVC其中包含两个两个方法,-(i...

  • iOS浅谈KVC

    KVC简称KeyValueCoding,是一个基于NSKeyValueCoding非正式协议的机制,可以允许开发者...

  • iOS-KVC浅谈

    前言:往往会某项工具WORK,就想究其原理。本文先简单介绍KVC 一、KVC 简介 1.1 KVC 概述 1.KV...

  • iOS____浅谈KVC

    kvc的定义 KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过Key名...

  • KVO&KVC浅谈

    在谈论KVO和KVC之前,先引出几个问题 问题一:iOS用什么方式实现KVO,你可以理解成KVO本质是什么? 1....

  • 浅谈NotificationCenter、KVC、KVO、Del

    KVO(Key Value Observing):一对多,观察者模式,键值观察机制,它提过了观察某一树形变化的方法...

  • KVC详解

    KVC 目录结构KVC定义KVC取值和设置KVC使用keyPathKVC处理字典KVC作用 参考:iOS KVC和...

  • iOS原理篇(二): KVC实现原理

    KVC实现原理 什么是 KVC KVC基本使用 KVC 原理 总结 一 、 什么是KVC KVC的全称是Key-V...

网友评论

      本文标题:浅谈KVC

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