KVC 实现机理分析

转载 2012年03月28日 11:55:38

 

Key-Value Coding(KVC)实现分析

 

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

比如说如下的一行KVC的代码:

[site setValue:@"sitename" forKey:@"name"];


就会被编译器处理成:

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


首先介绍两个基本概念:

(1)SEL数据类型:它是编译器运行Objective-C里的方法的环境参数。

(2)IMP数据类型:他其实就是一个编译器内部实现时候的函数指针。当Objective-C编译器去处理实现一个方法的时候,就会指向一个IMP对象,这个对象是C语言表述的类型(事实上,在Objective-C的编译器处理的时候,基本上都是C语言的)。

关于如何找到实现函数的指针,可参考文章:《Objective-C如何避免动态绑定,而获得方法地址》:http://www.cocoadev.cn/Objective-C/Get-method-address.asp

这下KVC内部的实现就很清楚的清楚了:一个对象在调用setValue的时候,(1)首先根据方法名找到运行方法的时候所需要的环境参数。(2)他会从自己isa指针结合环境参数,找到具体的方法实现的接口。(3)再直接查找得来的具体的方法实现。

相关文章推荐

KVO/KVC 实现机理分析

作者:杨登峰 (dengfengyang@gmail.com) 时间:2010-03-12 转帖请注明转之 苹果开发中文网(http://www.CocoaDev.cn) 以上说明是...

KVO/KVC 实现机理分析

作者:杨登峰 (dengfengyang@gmail.com) 时间:2010-03-12 转帖请注明转之 苹果开发中文网(http://www.CocoaDev.cn) 以上说明是...

KVO/KVC 实现机理分析

Objective-C里面的Key-Value Observing (KVO)机制,非常不错,可以很好的减少浇水代码。关于KVO的学习,可以参考文章:《Key-Value Observing快速入门》...

iPhone程序开发 KVO/KVC实现机理分析

iPhone程序开发KVO/KVC实现机理分析是本文要介绍的内容,不多说,直接进入话题。我们来看详细内容。 Objective-C里面的Key-Value Observing (KVO)机制,非...

iPhone程序开发 KVO/KVC实现机理分析

iPhone程序开发KVO/KVC实现机理分析是本文要介绍的内容,不多说,直接进入话题。我们来看详细内容。 Objective-C里面的Key-Value Observing (KVO)机制,非常不...

KVO/KVC 实现原理进一步分析

本文由DevDiv Vincent (vincent@devdiv.com)整理、进一步分析,转载请注明出处! 1. 函数调用(消息)实现分析: 我们看这条语句: [代码]c#/cpp/oc...

蓝牙基带数据传输机理分析

蓝牙(Bluetooth)是一种新型、开放、低成本、短距离的无线连接接技术,可取代短距离的电缆,实现话音和数据的无线传输。这种有效、廉价的无线连 接技术可以方便地将计算机及外设、移动电话、掌上电脑、信...

蓝牙基带数据传输机理分析

蓝牙(Bluetooth)是一种新型、开放、低成本、短距离的无线连接接技术,可取代短距离的电缆,实现话音和数据的无线传输。这种有效、廉价的无线连 接技术可以方便地将计算机及外设、移动电话、掌上电脑、...

详解键值观察(KVO)及其实现机理

http://www.cppblog.com/kesalin/archive/2012/11/17/kvo.html 一,前言 Objective-C 中的键(key)-值...

S4实现机理介绍

S4实现机理介绍 2011-03-24 12:53 450人阅读 评论(2) 收藏 举报          S4是yahoo开源的一套流式数据处理系统,什么是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)