KVC实现原理简介

 KVC,全称:Key-Value-Coding。

  KVC运用了isa-swizzling技术。isa-swizzling就是类型混合指针机制。KVC主要通过isa-swizzling来实现其内部定位查找。isa指针(is a kind of),指向维护分发表的对象的类。该分发表实际上包含了指向实现类中的指针和其他数据。

比如:8

[dic setVaule:@"zhangsan" forKey:@"name"];

当运行的时候就会被编译成:

SEL sel = sel_get_uid("setValue:forKey:");
IMP method = objc_msg_lookup(dic->isa,sel);
method(dic,sel,@"zhangsan",@"name");

其中,sel_get_uid函数是通过方法名得到一个方法选择器。

objc_msg_lookup:如果我们想用OC运行函数得到一个IMP,就可以使用objc_msg_lookup函数 。

这样KVC内部实现就可以这样描述了:

一个对象在调用setValue的时候,

1、根据方法名找到运行方法的时候所需要的环境参数。

2、他会从自己isa指针结合环境参数,找到具体的方法实现接口。

3、再直接查找得到的具体的方法实现。

时间: 2024-09-11 11:34:51

KVC实现原理简介的相关文章

KVC/KVO原理详解及编程指南(转)

作者:wangzz 原文地址:KVC/KVO原理详解及编程指南 本文只转载KVC部分讲解,KVO部分可到原博客查看. 本人在阅读过程中也进行了一些勘误修改. 前言 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的理解. 2.由于KVO内容较少,而且是以KVC为基础实现的,本文将着重介绍KVC部分. 一.简介 KVC/KVO是观察者模式的一种实现,在Cocoa中是以被万物之源NSObject类实现的NSKeyValueCoding/NSKeyValueObserving非正式

JavaScript 包管理器工作原理简介

本文讲的是JavaScript 包管理器工作原理简介, 不久前,Node.js 社区的负责人之一 ashley williams 发了一条这样的推特: lockfiles = awesome for apps, bad for libs this is not a new thought, i'm confused why's everyone mad about this 锁文件 = 棒(对于应用而言),坏(对于库而言),这不是一个新想法,我只是很困惑,为什么所有的人都因为这个很崩溃 - @a

Sql注入原理简介_动力节点Java学院整理

一.什么是sql注入呢? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击.如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入. 黑客通过SQL注入攻击可以拿到网站数据库的访问

PXE无盘网络原理简介及实战应用

一.PXE工作原理: PXE(Preboot Execution Environment)称为远程引导技术,方便了管理员简易安装大批量的计算机系统.在服务器上架设DHCP,FTP,TFTP服务,首先客户机从DHCP服务器的地址池中获取IP地址,然后客户端通过TFTP从服务器下载内核.内核的驱动以及硬盘的引导文件.然后引导操作系统开始安装. 二.PXE的优势: 1. 减少了系统安装人员误操作 2. 节省时间方便大批量裸机操作系统的安装 三.PXE使用范围: 常常使用于企业.网吧群体裸机系统的安装

Memcached 分布式缓存实现原理简介_Linux

摘要 在高并发环境下,大量的读.写请求涌向数据库,此时磁盘IO将成为瓶颈,从而导致过高的响应延迟,因此缓存应运而生.无论是单机缓存还是分布式缓存都有其适应场景和优缺点,当今存在的缓存产品也是数不胜数,最常见的有redis和memcached等,既然是分布式,那么他们是怎么实现分布式的呢?本文主要介绍分布式缓存服务mencached的分布式实现原理. 缓存本质 计算机体系缓存 什么是缓存,我们先看看计算机体系结构中的存储体系,根据冯·诺依曼计算机体系结构模型,计算机分为五大部分:运算器.控制器.存

Blktrace原理简介及使用

Blktrace简介 Blktrace是一个用户态的工具,用来收集磁盘IO信息中当IO进行到块设备层(block层,所以叫blk trace)时的详细信息(如IO请求提交,入队,合并,完成等等一些列的信息).   块设备层处于下图(借用褚霸的图)中的 "block layer"     Blktrace工作原理   (1)     blktrace测试的时候,会分配物理机上逻辑cpu个数个线程,并且每一个线程绑定一个逻辑cpu来收集数据 (2)     blktrace在debugfs

selenium-webdriver(python) (十四) webdriver原理简介

之前看乙醇视频中提到,selenium 的ruby 实现有一个小后门,在代码中加上$DEBUG=1 ,再运行脚本的过程中,就可以看到客户端请求的信息与服务器端返回的数据:觉得这个功能很强大,可以帮助理解webdriver的运行原理. 后来查了半天,python并没有提供这样一个方便的后门,不过我们可以通过代理的方式获得这些交互信息: 一.需要安装java 虚拟机与selenium-server-standalone ,参考 <selenium + python自动化测试环境搭建>第7.8操作:

虚拟路由器冗余协议VRRP的原理简介及应用

VRRP简介: VRRP(VIRTUAL ROUTER REDUNDANCY PROTOCOL),又称为虚拟路由器冗余协议.是一种lan接入设备备份协议.他可以把一个虚拟路由器的责任动态分配到局域网中的VRRP路由器中的一台.控制虚拟路由器ip地址的vrrp路由器称为主路由器,他负责转发数据包到这些虚IP.一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就允许虚拟路由器的 IP 地址可以作为终端主机的默认第一跳路由器.使用 VRRP 的好处是有更高的默认路径的可用性而无需在每个终端

Oracle恢复内部原理简介

Oracle 7 v7.2 恢复大纲 作者:Andrea Borr  & Bill Bridge 版本:1                May 3, 1995 本文概述了Oracle 7.2版本如何进行数据库恢复.本文读者应当熟悉Oracle 7.2的管理指南.相比于管理指南,本文目的是为了更详细描述Oracle恢复用到的算法.数据结构以及一些技术细节. 一.简介 Oracle数据库提供了下列两类失败模式下的数据库恢复: 1.  实例失败:丢失了Oracle数据缓存中的数据或者内存中的数据 2