说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

深入理解Objective-C的Runtime机制

HTML文档下载 WORD文档下载 PDF文档下载
Objective-C是基于C加入了面向对象特性和消息转发机制的动态语言,除编译器之外,还需用Runtime系统来动态创建类和对象,进行消息发送和转发。本文作者通过分析Apple开源的Runtime代码来深入理解OC的Runtime机制。

Objective-C是基于C语言加入了面向对象特性和消息转发机制的动态语言,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和转发。下面通过分析Apple开源的Runtime代码(我使用的版本是objc4-646.tar)来深入理解Objective-C的Runtime机制。

Runtime数据结构

在Objective-C中,使用[receiver message]语法并不会马上执行receiver对象的message方法的代码,而是向receiver发送一条message消息,这条消息可能由receiver来处理,也可能由转发给其他对象来处理,也有可能假装没有接收到这条消息而没有处理。其实[receiver message]被编译器转化为:

id objc_msgSend ( id self, SEL op, ... );

下面从两个数据结构id和SEL来逐步分析和理解Runtime有哪些重要的数据结构。

SEL

SEL是函数objc_msgSend第二个参数的数据类型,表示方法选择器,按下面路径打开objc.h文件:

SEL Data Structure

查看到SEL数据结构如下:

typedef struct objc_selector *SEL;

其实它就是映射到方法的C字符串,你可以通过Objc编译器命令@selector()或者Runtime系统的sel_registerName函数来获取一个SEL类型的方法选择器。

如果你知道selector对应的方法名是什么,可以通过NSString* NSStringFromSelector(SEL aSelector)方法将SEL转化为字符串,再用NSLog打印。

id

接下来看objc_msgSend第一个参数的数据类型id,id是通用类型指针,能够表示任何对象。按下面路径打开objc.h文件:

id Data Structure

查看到id数据结构如下:

/// Represents an instance of a class.struct objc_object {    Class isa  OBJC_ISA_AVAILABILITY;};/// A pointer to an instance of a class.typedef struct objc_object *id;

id其实就是一个指向objc_object结构体指针,它包含一个Class isa成员,根据isa指针就可以顺藤摸瓜找到对象所属的类。

注意:根据Apple的官方文档Key-Value Observing Implementation Details提及,key-value observing是使用isa-swizzling的技术实现的,isa指针在运行时被修改,指向一个中间类而不是真正的类。所以,你不应该使用isa指针来确定类的关系,而是使用class方法来确定实例对象的类。

Class

isa指针的数据类型是Class,Class表示对象所属的类,按下面路径打开objc.h文件:


Class Data Structure

/// An opaque type that represents an Objective-C class.typedef struct objc_class *Class;

可以查看到Class其实就是一个objc_class结构体指针,但这个头文件找不到它的定义,需要在runtime.h才能找到objc_class结构体的定义。

按下面路径打开runtime.h文件:

objc_class Data Structure

做成一个时间限制的测试版 -VB资料 PHP中利用jQuery实现SWF图像上传和裁剪 VB.NET或C#将DataSet快速导出到Excel中 HashSet的equals和hashCode重写问题 PendingIntent实现原理和代码 IntentService实现原理及内部代码 AsyncTask实现原理和内部代码 Neither user nor current process错误 ListView的右边滚动滑块启用方法 Live Wallpaper动态壁纸开发 控制软键盘显示和隐藏 设置Activity大小不再全屏原理 Android面试题,看看你基础如何? Android Canvas绘图抗锯齿解决方法 Android xliff和字符串资源 android.hardware.USB类介绍 Android开发经验谈之应用间数据共享 android_asset这个URL详细使用方法 Android 2.3系统自带高清UI图标下载 设置ScrollView滚动条的颜色 WakeLock使用方法示例代码 Concurrent并发库常见问题总结 Android数据库SQLite性能优化技巧 Android开发之Java设计模式基础篇 Android开发之Java设计模式入门篇 Android开发之Java设计模式 Android开发之Java并发包集合类性能分析 Android开发之Java集合类性能分析 Android开发之Java虚拟机原理和内存分配 Android开发之Java基础系列教程目录 Android Theme主题样式开发注意点 这是我作的jsp和bean作的程序为什么不能运行:这一次发的是运行错误的信息。 谁敢拍着自己胸口摸着良心说没有用过马甲的 麻烦了:) 如何建立一个button清空文本框? 关于在RedHat2.1As上安装Oracle9i(9.0.1)的错误问题,帮帮我吧,火烧眉毛了! 急等答案 ,请问数据库中 的Null和零值有什么区别,请给详细解释一下 用FLASHGET无法下载. 趁着各位斑竹到任,赶紧把几个悬而未决的问题提出来,呵呵! com+的调用方式 哪位大侠知道今年计算机等级考试二级C语言还是用Turbo C2。0吗?还是在Dos环境下吗?(100相赠) 关于多媒体定时器的问题,各位进来看看 session出的问题,高手请进来!! 请问,大连雅奇培训如何?请指点。。。。。。 怎样用header()做下载文件? 关于检测组合键的程序怎样写? 菜鸟问题!!!页面显示后台数据 请问软件包LEDA -- library of the data types and algorithms 哪里有下载的? 如何获得当前页面中的所有Textbox控件集合? 如何对两个表操作???谢谢! java的程序在写Dreamweaver 4里写完不可以直接用,是不是 打印的问题 DELPHI5的资源编辑器用起来很不爽,有没有好点的? 帮帮忙~~~~ 请问软件包LEDA 哪里有下载的?谢谢 ado连接远程数据库是以文件共享方式,还是c/s方式啊? 有没有工作的JAVA程序员吗? 简单的语法问题 vb还是不太会用 求教 最菜的问题 如何保存无法保存的网页? 只要每人献出一点爱,人人都能成为程序员 呵呵,又有问题了 苦恼,大家帮忙啊 关于声音处理的一个问题 求英文资料,急!!! 帮忙解释一下程序,谢谢:) 怎样实现这样的存储过程?高手快来! 用过websnap的进来看一下,巨简单! 调试版本与发布版本的区别? 急等答案, sql的基本表是用一个存储文件表示还是用若干个存储文件表示 我的Windows 2000有时无法关机(重起) ********通过编号找名称!*******求最快的方法!!! 格式化硬盘后安装WIN98过程中为什么出现蓝屏,继续安装下去连软件都安装不了? 请教一个让人郁闷的问题! 寻找一本人民邮电出版社出版的有关 GSM 网络优化的书 请问高手:能不能动态creatLayer? select * ????? 问候大家 晚上好 ,有个问题请教,立即给50分! 怎样使模式对话框最大化显示? 关于socket 十万火急,大哥大姐快救小弟一命!!!考高程的或考过的请帮忙,感激!!! 求救 跟帖 隋朝末年长安守将是谁?隋朝末年,群雄并起,在太原李渊起兵攻打长安之时,当时的长安留守是谁,有知道的没? 【急』十字绣,怎么把六股线拆成4股十字绣一根粗线里有六股,但需要用四股线,怎么分呢?分开了,如果很散,怎样拧成一大股? 质量为m的物块,系在弹簧的一端,弹簧的另一端固定在转轴上,弹簧的自由长度为L.劲度系数为K,使物块在光滑水平支持面上以角速度w作匀速圆周运动,则此时弹簧的长度为多少? 隋朝都城到底是在大兴还是长安?怎么说法不同呢? 已知集合A={x|-2 The hot tiles on the floor will melt your 隋朝人说都城时是长安还是大兴城 集合A={y|y=-x^2+4,x∈N.y∈N}的真子集的个数为( ).A.9 B.8 C.7 D.6 一个蚂蚁从5楼掉下1楼来为什么没有摔死?这是我很长时间搞不懂的问题啊.求救`` 行业分类中仪器仪表属于第几类 隋朝的长安和洛阳分别是什么时期营建的都城 若集合A={x|x=2k-1,k∈z},B={x=4L±1,L∈Z}则 A,A=B B,A是B的真子集 C,B是A的真子集 D,A∪B=Z 仪器仪表及文化办公用机械制造业属于高新技术产业吗 你们经常用哪个动物的表情看看哪个好看好笑的 某列车均速前进,从它驶上300米的桥到通过为止,一共用了三分之一分钟,又知一盏固定的灯一直照列车10秒,求这列车的长.(要写过程) 组成无机自然界最多的元素是什么 青蛙的益处 在空气中弹簧测力计测得物重2.7牛,将其一半浸入水中,示数变为2.2牛(g取10牛每千克)求物体所受浮力大小物体的密度 人体内含量最多的无机元素是? 求一篇有关养宠物的好处的英文对话,急! 有一石块,在空气中称的重为19.6牛,全部浸没在水中称得重为14.7牛.问:(1)石块的体积多大 (2)石块的密度是多少? 这是什么表情动物 养宠物好处英文 有一金属块,在空气称得它的重是72牛,当它全部浸没水中时,弹簧秤的示数为52牛(g=10牛/千克)(1)金属块所受的浮力(2)排开水的体积 这个是什么动物的表情 成都离最近大海有多远 某列车匀速前进,从驶上300米的桥到完全通过,一共用了1/3分钟,又知列车通过桥上一灯塔用时10秒钟,.某列车匀速前进,从驶上300米的桥到完全通过,一共用了1/3分钟,又知列车通过桥上一灯塔用时 鸟窝有什么好处?鸟窝有什么好处呢?以前好早好早,还是我小时候的时候,好像听说,吃鸟吐出来的唾沫有好处?还是什么?鸟用唾沫编制成的鸟窝到底有什么好处阿. 小行星最近离我们的地球有多远?有意者都给我一个答案我吧? melt temperature是什么意思 先天性行为和非条件反射有何区别? 一个人面对另一个人时都会看着对方的脸,因为人类能够读懂面部表情.但是你发现没有,当动物面对你时,也是看着你的面部,即使是个体比人小得多的猫,当它面对你时也绝不会盯着你的脚看.难 地球离各个星球的距离? 非条件反射和先天性行为哪个含义更加广泛?或者说这两个概念含义根本就是相同的?非条件反射是人生来就有的、遗传决定的,比较低级、简单的神经调节方式;先天性行为是动物的一种本能, 求许多动物做同一动作的表情 比如 兔斯基 嘻哈猴这类的都做一个表情 比如揉脸、鼓掌啥的 有的发804931395@com最好要动态的哇 2L 搜的到还找你呀 甲乙2石头,大小不同,石质相同.甲石质量1.5千克,体积4立方分米,乙石质量18千克,体积多少? 一个小孩用10N的力踢了石块,石块滑行1M,则小孩对石块做功多少?答案写位移不知无法计算 光子到底有没有质量 甲、乙两块石头,大小相同,石质相同.甲石头质量是1.5千克,体积是4立方分米.乙石头质量是18千克,体积是多少? 非条件反射是不是先天的啊对相关的知识也要说一下又要具体 某人站在高楼的平台边缘,以 20m /s的速度竖直向上抛出一石子,求抛出后石子经过离抛出点 15m 处所需要的时间.(g= 10m /s2). 甲乙两块石头,大小不同,石质相同,甲石头的质量是1.6千克,体积是4立方分米.乙石头的体积是40立方分米质量是多少? 十字绣的法兰西节怎么打? 胎生的是哺乳动物,那下蛋的叫什么动物像老虎,狗,猫喂奶的叫哺乳动物,那鸡,鸭这些下蛋的叫什么动物啊? 我国公民全部政治生活的基础和准则(基本内容)是 既属于哺乳动物,又要靠生蛋来繁殖后代的是: 谁能告诉我有关简单的细菌与霉的知识细菌的认识和什么是霉 我国公民暴雨政治生活的基本原则是什么 r、s、e、n、u组成什么单词 为啥子有的哺乳动物会下蛋? 我养宠物的英文怎么说 p u s e r 组成什么单词 细菌靠生物而活那么什么靠细菌活? 日本地震到底死了多少人呢?拜托了各位 谢谢 隋朝时长安属于什么省份的?隋朝时长安属于哪个省份的? 为什么有的哺乳动物会下蛋?不许抄袭答案 十字绣用丝线绣好看还是用绵线绣好看以前只绣过一个钱包,听说丝线绣比较慢,这点倒没什么.丝线绣有哪些好处与坏处,请各位妹妹赐教 哪种哺乳动物是通过生蛋来繁衍后代? 十字绣4股线应该折几折? 为什么蚂蚁从高出掉下不会摔死? 吉林前郭地震灾区已发现2户房屋倒塌、江苏全省出现液态奶供不应求 物价上涨调查显示逾半受访香港公司明年平均加薪中国最后一个未通公路的县墨脱今日举行通讯:通往“高原孤岛”的“生命线”高薪由五毛一块凑起 过万很少聚焦激发社会投资活力:用改革撬动“活快递哥倒在送货路上香港官员:监护人代双非儿童买房应被豁复旦大学研究:PM0.5“杀伤力”盖传美国在台北设监听站 台方回应:台美宁波实现大灾之后无大疫 传染病例同比南京:空气质量不达预期将人工增雨消霾南京:承诺绿地不兑现 开发商将受处罚宁波市将新启用一批电子警察规范行车秩《温家宝谈教育》首发 卸任总理后首次孟加拉国列车脱轨致两人死亡诺基亚亏损大幅收窄 手机总销量同比下俄罗斯达吉斯坦共和国首府发生爆炸致1吉林前郭震区移动通讯中断 受灾情况正印度长途巴士车祸后爆炸 45名乘客被优质饮用水直接入户 居民不用掏一分钱中国保险创新大奖揭晓 珠江人寿获“年吴长江被立案侦查 王冬雷欲彻底驱吴《汉字树:活在字里的中国人》见面会转型渠道聚焦电商富士康加速“去制造化8所学校年底要创建示范食堂无证驾摩托被扣 趁保安不备开走曹彤或任前海微众银行行长9·30房贷新政满月 二手房日均成交乐购江门店今日停业参与重大市政工程建设 品质提升赢得社嘉源建筑装饰工程有限公司顺走快递首饰清洁工获刑3年别跟陌生人走,孩子做不到啊吉他情圣班尼斯下周东莞演出怀胎7月照吸毒 台女毒贩直叹“戒不了中国国际雕塑节闭幕 众艺术家发出长沙沪指高开0.09%后收复2400点 俄乌欧签署供气协议 将成立专项基金助快播案件未定性无法偿付员工赔偿自种香料配酒配菜倍儿香
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘