博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KVC之-setValue:forKey:方法实现原理与验证
阅读量:5928 次
发布时间:2019-06-19

本文共 902 字,大约阅读时间需要 3 分钟。

http://www.jianshu.com/p/d54af904967b

- (void)setValue:(id)value forKey:(NSString *)key方法,实现原理与验证

功能:使用一个字符串标示符给一个对象的属性赋值.它支持普通对象和集合对象
这个方法的默认实现如下:

(1).首先去接收者(调用方法的那个对象)的类中查找与key相匹配的访问器方法(-set<Key>),如果找到了一个方法,就检查它参数的类型,如果它的参数类型不是一个对象指针类型,但是只为nil,就会执行setNilValueForKey:方法,setNilValueForKey:方法的默认实现,是产生一个NSInvalidArgumentException的异常,但是你可以重写这个方法.如果方法参数的类是一个对象指针类型,就会简单的执行这个方法,传入对应的参数.如果方法的参数类型是NSNumberNSValue的对应的基本类型,先把它转换为基本数据类,再执行方法,传入转换后的数据.**


(2).如果没有对应的访问器方法(setter方法),如果接受者的类的+accessInstanceVariablesDirectly方法返回YES,那么就查找这个接受者的与key相匹配的实例变量(匹配模式为_<key>,_is<Key>,<key>,is<Key>):比如:keyage,只要属性存在_age,_isAge,age,isAge中的其中一个就认为匹配上了,如果找到这样的一个实例变量,并且的类型是一个对象指针类型,首先released对象上的旧值,然后把传入的新值retain后的传入的值赋值该成员变量,如果方法的参数类型是NSNumberNSValue的对应的基本类型,先把它转换为基本数据类,再执行方法,传入转换后的数据.



(3).如果访问器方法和实例变量都没有找到,执行setValue:forUndefinedKey:方法,该方法的默认实现是产生一个 NSUndefinedKeyException 类型的异常,但是我们可以重写setValue:forUndefinedKey:方法

转载地址:http://vbevx.baihongyu.com/

你可能感兴趣的文章
第 1 章 PostgreSQL 安装
查看>>
Deep Learning(深度学习)学习笔记整理系列之(八)
查看>>
Python学习之运算符
查看>>
Hadoop - Mac OSX下配置和启动hadoop以及常见错误解决
查看>>
华东师范大学2017年数学分析考研试题
查看>>
查看JVM统计信息【转】
查看>>
膝盖中了一箭之康复篇9-12周
查看>>
maven mvn Failed during checkstyle execution
查看>>
跨域请求获取Solr json检索结果并高亮显示
查看>>
项目2.0上线,回想过后杂谈总结基础回顾一番
查看>>
蓝牙BLE传输性能及延迟分析
查看>>
BT下载原理分析
查看>>
12月18日云栖精选夜读:阿里云机器学习平台PAI,助力降低机器学习的成本和技术门槛...
查看>>
聚能聊每周精选<第一期>
查看>>
SQL优化常用方法11
查看>>
【存储】GPFS简介及搭建
查看>>
Java中的字符串 II
查看>>
正则表达式太慢?这里有一个提速100倍的方案(附代码)
查看>>
Linux 线程分离状态
查看>>
[20160112]存储还是应用问题.txt
查看>>