| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 【iOS】—— KVC -> 正文阅读 |
|
[移动开发]【iOS】—— KVC |
KVCKVC概念
KVC基本API方法
在这里要注意的是前两种方法是KVC的设值,后两种方法是KVC的取值。 其他方法
首先我们来看设值 设值最简单的是用key方法直接设值:
还可以使用keyPath方法进行多重设值
Dog类和Person类是两个继承NSObject的类,先在Person类里面设置Dog类型的属性,在Dog类里设置int类型的age属性,即可完成设值过程。 取值在取值过程中,优先级是最重要的一点,一定要搞清楚KVC取值的优先级,我们可以先来看下图:
第一优先级在这个过程中,第一优先级是getter方法,也就是说在取值的时候,先判断有没有getter方法,如果有的话直接取值成功,不需要后面的步骤了。
我们在Person的m文件中把三个getter方法全写上,此时打印:
我们发现在所有getter方法里面,优先级最高的是getName方法,然后我们把这个方法注释掉,经过实验得出结论: 在三个getter方法中,优先级排序: 第二优先级我们发现上图中在第二优先级前面有一个方法,这个方法是什么呢,我们来看看:
这个方法是BOOL类型,用来判断是否需要查找第二优先级,默认情况下为Yes,如果返回值改为No,就跳过查找第二优先级。 此时我们对成员变量通过重写init方法进行赋值:
在进行第二级优先级测试的时候,先把第一优先级的方法注释起来,然后运行程序: 同样用刚才相同的方法进行测试,发现第二级方法的优先级: _key > _iskey > key > iskey 那么如果两种情况都没有呢?我们将代码都注释掉来试试: 这时候程序编译没问题,运行时就会报经典的Undefine问题了。 KVC问题其实是一个比较抽象的问题,如果文章难以理解的话,这里推荐一个视频博主,关于此节内容讲解十分细致: |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 5:56:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |