一、KVC 简介

① 定义
  • KVC 是 Key-Value Coding 的简称,中文译义为键值编码。
  • KVC 是指 iOS 的开发中,可以允许开发者通过 Key 名直接访问对象的属性,或者给对象的属性赋值,而不需要调用明确的存取方法。
  • KVC 是由 NSKeyValueCoding 非正式协议启用的一种机制,对象采用该协议来间接访问其属性,即可以通过一个字符串 key 来访问某个属性。这种间接访问机制补充了实例变量及其相关的访问器方法所提供的直接访问。
  • 通过 KVC 就可以在运行时动态地访问和修改对象的属性,而不是在编译时确定,这也是 iOS 开发中的黑魔法之一,很多高级的 iOS 开发技巧都是基于 KVC 实现的。
② 相关方法
  • 在 NSKeyValueCoding 中提供了 KVC 通用的访问方法,分别是 getter 方法 valueForKey: 和 setter 方法 setValue:forKey:,以及其衍生的 keyPath 方法,这两个方法对各个类均通用。并且由 KVC 提供默认的实现,我们也可以自己重写对应的方法来改变实现。
  • 在 NSKeyValueCoding 中,KVC 最为重要的方法如下:
 // 通过key来取值- (id)valueForKey

iOS之深入解析KVC的底层原理和自定义KVC的实现相关推荐

  1. iOS之深入解析类加载的底层原理:类如何加载到内存中

    一.App 启动与 dylb 加载 App 启动会由 libdyld.dylib 库先于 main 函数调用 start,执行 _dyld_start 方法,然后运用汇编实现调用 dyldbootst ...

  2. iOS之深入解析KVO的底层原理

    一.KVO 简介 ① 概念 KVO 全称 Key Value Observing,是苹果提供的一套事件通知机制,允许对象监听另一个对象特定属性的改变,并在改变时接收到事件. 由于 KVO 的实现机制, ...

  3. iOS之深入解析Runloop的底层原理

    一.Runloop 简介 ① 什么是 Runloop ? RunLoop 是事件接收和分发机制的一个实现,是线程相关的基础框架的一部分,一个 RunLoop 就是一个事件处理的循环,用来不停的调度工作 ...

  4. iOS之深入解析AFNetworking的底层原理

    AFNetworking 简介 一.AFNetworking 版本 AFNetworking 是 iOS 最常用的网络框架,虽然系统也有 NSURLSession ,但是一般不会直接用它.AFNetw ...

  5. iOS之深入解析渲染的底层原理

    一.计算机渲染原理 ① CPU 与 GPU 的架构 对于现代计算机系统,简单来说可以大概视作三层架构:硬件.操作系统与进程.对于移动端来说,进程就是 App,而 CPU 与 GPU 是硬件层面的重要组 ...

  6. iOS之深入解析malloc的底层原理

    一.前言 iOS 在创建对象的时候,alloc 方法有三个核心部分:cls->instanceSize(计算需要开辟内存的大小),calloc(开辟内存空间),obj->initlnsta ...

  7. iOS之深入解析YYModel的底层原理

    一.前言 YYModel 是由 ibireme 开发的一套小而精美的模型转换框架,采用分类的形式,无需继承框架的某个基类就可以方便地完成模型的转换,且内部做了自动类型转换和安全处理,可以有效地防止因模 ...

  8. iOS之深入解析“锁”的底层原理

    一.OSSpinLock(自旋锁) 自从 OSSpinLock 出现安全问题,在 iOS10 之后就被 Apple 废弃.自旋锁之所以不安全,是因为获取锁后,线程会一直处于忙等待,造成了任务的优先级反 ...

  9. iOS之深入解析GCD的底层原理

    一.队列 ① 队列实现源码分析 在源码中搜索 dispatch_queue_create 关键字,可以在 queue.c 中发现: dispatch_queue_tdispatch_queue_cre ...

最新文章

  1. windows监控——再见zmq
  2. AutoCompleteTextView的简单用法
  3. 一周一论文(翻译)——[SIGMOD 2016] RDMA over Commodity Ethernet at Scale
  4. SpringBoot:spring-boot-starter-parent
  5. .net Kafka.Client多个Consumer Group对Topic消费不能完全覆盖研究总结(一)
  6. vitual dom实现(转)
  7. URlRewriter组件下载及使用说明
  8. HDU3032 Nim or not Nim?
  9. FFmpeg下载无损截取HLS视频流
  10. mysql sql语句优化面试题_SQL面试题之SQL优化
  11. 二路归并排序的C++实现
  12. SQL SERVER数据库中勒索病毒 SQL数据库中病毒恢复数据
  13. Javascript高级程序设计——9.正则表达式(1)
  14. 服务器被攻击 显示503,打开网页后出现503 service unavailable等字样,什么意思
  15. VM虚拟机下如何和Windows主机共享文件夹
  16. 解决 k8s flannel网络 一直 Init:ImagePullBackOff和coredns状态为Pending
  17. android通讯录开发(粗糙实现微信通讯录的功能)
  18. SSO中的Pattern
  19. 想转行当程序员,该怎么做?|猿代码科技
  20. 华为OD机试107-跳格子游戏

热门文章

  1. oracle ORA-14452错误处理
  2. day24-1 元类
  3. LOJ#6085. 「美团 CodeM 资格赛」优惠券(set)
  4. Django系列目录
  5. shell中各种美元符号组合
  6. C#如何释放已经加载的图片 (转)
  7. 3 CSS 高级语法
  8. ASP.NET2.0中用ICallbackEventHandler实现客户端与服务器端异步交互
  9. 机载计算机网络拓扑结构设计,计算机网络课程设计-网络拓扑结构设计.doc
  10. python论文格式检查系统_论文格式检查软件