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

深入理解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

Github 终于开始认真考虑开源项目许可证了 雅虎发布今年第二季度财报 总营收为11.35亿美元 既然无法避免被GAE锁定,何不考虑其中的机遇并自力更生 19亿美金背后的分析:91为什么要卖?百度为什么要买? 直接拿来用!最火的iOS开源项目(三) 让代码飞一会儿,超级有用的CSS编码工具集 创业者如何在Demo演讲上打动投资人? 微软小打小闹的移动版Outlook Web App,会不会被用户抛弃? 哪门编程语言影响力最大? 微软启动“Companion Web”计划 可互连多屏幕设备 让你望而却步的密码管理服务已获得100万美元的种子基金 SDCC 2013开始公开征集讲师和演讲主题 不用图片和JS,照样创建绚丽的动态CSS3菜单 是福还是祸?开发者饱经风雨的内心独白 设计师/开发者看过来,七月35款新工具速递! Hadoop进军机器学习:Cloudera收购Myrrix共创“Big Learning” 张民杰:三人团队的OpenStack机会 White Elephant:开发者必备的Hadoop利器 不及分析师预期:微软第四季财报揭晓 净利49.7亿美元 Facebook收购英国手机代码验证公司Monoidics Apache基金会废弃其C++标准库 鲍尔默宣称微软有一百万台服务器,这个数字真的靠谱吗? 全球6000开发者:iOS、Android、WP最痴情谁? 提升网站知名度的十大方法 IBM移动平台首席架构师Greg Truty:MobileFirst从底层架构开始 Hallo.js:一款所见即所得的Web编辑器 数据分析≠Hadoop+NoSQL,不妨先看完善现有技术的10条捷径 移动周报:百度收购91,19亿美金背后的博弈 植物大战僵尸2:“免费+内付费”模式引发争论 [CTO俱乐部第103期] 高德和四维图新技术高管谈地图导航的发展与挑战 Java 7爆最新漏洞,10年前的攻击手法仍有效 小妹初来此地,想和大家认识一下:) 如何禁止修改某一字段? 请问 怎么修改文本文件中的内容呢? 一些J2EE资料 如何将<div sytle="Z-INDEX: 100">的<div>元素<iframe>框之上? 每次重新启动WIN2000时无耍点击超级用户口令从而自动进入,默认为超级用户 动态生成数据表的问题! 高分求解一条智力问题 *.bpg文件怎么打開﹖ 怎样压缩Access数据库? 问一个打印的初级问题? 如何使用net send 在internet 上发消息, 如何设置让主板上的喇叭不发声? 关于字符集的一个问题 关于金山网镖的一点问题?/ 急: seseion 和httpsession有什么区别啊.?jsp内部对象和javax.servlet.http.*下面的类似对象有什么区别和相同点? 高分急救:急,急,急 数据定义问题 急:关于rich text小应用程序的问题,请高手指点!谢了! 女大学生的一天(转载) 200分问一个小问题, 在线等: JBuilder自带的ESite for weblogic部署出错... 请问 vb 怎么样让函数返回一个二维数组?能给你例子吗? 有人知道上海通方信息系统有限公司吗?我要去面式了?大家帮帮忙,做ejb程序员。 域问题 转分 介绍制作DLL专业书籍 有关image的函数问题 请教? TObject和integer之间的转换问题 数据库简单问题 文本文件的最后一行怎末去掉换行符,用程序实现。 善良的程序员,当心QQ骗子啊! 谁有Qamonitor,小弟急用! 不要笑偶 转分 有会打印对象编程的吗?printer对象怎样打印横线??怎样打印带风格的报表?? 表分区的数量有上限吗 ASP 0178 (0x80070005) 各位高人,请一定帮个忙吧 !! SetCellImage 利用C# 读取系统当前进程的出现问题,帮忙!! 请教高手:怎样在一个窗口里能够输入文本文件(按回车键) 另一个窗口显示出同样的文本 高手在何方 (大力请进)sql字符串处理的问题 上哪能下到exchange 2000,下到马上给分! ado问题? 数据迁移问题??? 怎么把列名选出来? [在线求助]:有什么好的方法可以使得鼠标放上有链接的地方状态栏不显示真实地址? 高手在哪!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 点到平面的离差的绝对值就是点到平面的距离吗?最好从定义说明一下已知定义:如果自点M0到平面π引垂线,其垂足为Q,那么向量QM0在平面π的单位法向量n0上的射影叫做点M0与平面π间的离差 数列 3、6、10、15.的规律如果用公式列出,该怎么列? 非典是什么 谁能告诉我复数怎么表达?复数是数学里的 金属寒冰悠悠球(奥迪的)适合玩3a,4a还是5a呢?1、2a无视掉 心旷神怡: 绞丝旁一个卷是什么字? 一个两位数,十位数加个位数的七倍等于这个两位数,有几个这样的数 圆明园的毁灭从 凡是 统统 任意等词可以感受到侵略者的什么 一个绞丝旁,一个各,左右结构是什么字 根据下列各点的坐标变化,判断他们进行了怎样的运动(-1,3)→(-1,-3)(-5,-6)→(-5,-1)(3,4)→(-3,4)(-2,3)→(2,-3)今晚就要啊! 殇縕读什么?有什么含义?更多关于这个词的? 一点一横长一撇到南阳 神技悠悠球自由和奥迪悠悠球火狐哪个强?RT,从手感,性能方面考虑,说明理由,越详细越好. Cl2和Fe的在液态环境中,可能会生成FeCl2和FeCl3的反应是不是化合反应? 下面这段话是写给怀特老师的评语,请把其中缺少的内容准确地补上.怀特老师是一个很有个性的人,教学方法独特,常常有出人意料的举动,具体表现有();();()……他让我们的学习过 地球离太阳最近的时候是哪天 典韦怎么过 二、判断下列函数在指定区间内的单调性.:f(x)=x3, X∈(-∞ ,+∞) ,g(x)=x2, X∈(-∞ ,+∞)要求答案详细点,我是网络本科学员 英语翻译在人家衣服上看到的. 一吕二赵三典韦,典韦是死在那场战役? 我现在初3了、发现老师在上面讲什么我都不懂、求各位能够给我好的意见、怎么样才能补上去? sun of a 有关舒畅搜狐做何解释?这事不能就这么算了吧!我很生气谁知道哪该死的记者做出什么解释?或道歉没?奶奶的别叫我知道是谁!知道我抄家伙杀你全家!有关搜狐说舒畅像陈一冰示爱的事!我只 老师给我作文的评语说要叙述凄美的情节那,什么是凄美的情节 _____ 释义:the home of a king or a queen根据释义,写出单词 三国典韦 一个字二十撇是什么字? ABC三个门卫人员实行昼夜三班倒,怎样安排值班表_日班:早8-4点 中班:下战书4-12点 日班:12-早8点每个班是8小时,每个班是1人值班. 婀娜多姿、心旷神怡的解释 一个字二十撇迷底是什么 求一数列的通项公式1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,22,24,26,28,30,33,36,39,42,45,48,51,54,57,60.补充说明一下,这个数列的每10项是一个等差数列1 -10项 公差为1的等差数列11-20项 公差为2的等差数列21-30项 下邳域曹操鏖兵,白门楼吕布殒命是什么生肖? 《被饿坏了那匹马》中“我扭头冲了出来,真想哭.”把“冲”换成“跑”,你认为怎么样? 急!求一数列通项公式RT:已知数列{an}满足,a1+2乘a2+2平方乘a3+...+2的(n-1)次方乘an=8n,求{an}通项跪谢,紧急 下邳域曹操鏖兵,白门楼吕布殒命是什么意思? 碧云,快把马草提进去,那匹马实际指 ,饿坏了则是指 宗教怎么解决人生的意义这个问题的 钓鱼的启示 辩论会我们的问题是:该不该把那条大鲈鱼放掉!我是反方:不该把那条大鲈鱼放掉!我怎么说?SOS!对不起我只有5分了,求救! 别饿坏了那匹马课文续写,100字 一篇450字红楼梦读后感小学生的 下邳域曹操鏖兵,白门楼吕布殒命+÷猜什么生肖? 2009上海交大自主招生考试 如图所示,甲、乙两个小球分别固定在一根直角尺的两端A、B,直角尺的顶点O处 每个数都比前面少一半的通项公式怎么列?有一条前端AB长100米 在AB中间的中点画一颗星 在第1颗星和B点的中点在画的二颗星 以后重视在钱一颗星于B点中点画一颗星 吧各颗星到B的距离组成一 “下邳域曹操鏖兵,白门楼吕布殒命”是三国演义第几回?如题. 笔算一位数除多位数要注意什么 转折号上面有五百强名企的笔试题目吗? 下邳城曹操鏖兵,白门楼吕布殒命.打一个生肖 “不管你灿烂还是暗淡,你都是老师心中的星辰.请你振作吧,别伤了老师的心.”3.老师”2.本文运用了哪些修辞手法?6.本文预发了作者怎样的思想感情?马上就要, 两位数乘一位数的笔算一位数写在上面可以吗 1英语:让他们不要在河里游泳. 2英语;顺着中心大街走,邮电局就在你的左边. 3英语:向右拐. 快!谢 苏叔阳的《谢谢老师》阅读答案对“不管你灿烂还是黯淡,你都是老师心中的星辰.”表达意思 根据句子表达的意思写出成语1.比喻读书等不加分析地笼统接受.(填成语)2.比喻认错了对象,弄错了事情.(填成语)3.形容不顾生命危险,勇往直前.(填成语)4.形容很多人同时闯进门来.( 英语 请问邮局怎么走?4种 星辰因相似而暗淡 原来有基础上增加15个点 到底怎么算?请列出公式并且说明一下 彩虹岛酷酷的人生第一条件怎么做?我站着被怪K了一个下午,血药都刷空了,还是没完成,Why? 什么星星最黯淡 公式告诉我呗15张扑克牌那个 殇字怎么读这个殇是复制的,要求拼音我查了下字典,是shang第一声 埃及审判穆尔西或酿新一轮冲突印度东北部发生袭击事件7人死亡布宜诺斯艾利斯摄影展点燃阿根廷人摄影布宜诺斯艾利斯摄影展点燃阿根廷人摄影澳维州公租房房租欠费飙升 议员归咎政泰国民调显示超半数受访民众反对特赦法中国富豪被指乘私人飞机赴澳 花1.1法国记者马里遇害 法前部长呼吁法国迅一名韩国女游客在澳大利亚遭两少年性侵日本第26号台风给伊豆大岛带来11万美国称不会考虑赦免斯诺登 促其回国受日本前首相小泉坚定反核电路线 再次公俄媒称泰国沉船事故造成7人死亡 含3阿盟秘书长称支持卜拉希米就叙问题斡旋加拿大10岁男童发现超新星 为全球最分析称叙二次和议若破产叙利亚将成另一曝汪峰或哈林明年退出好声音穆尔西抵达开罗法庭 埃及高度戒备审判法国人卫仁博眼中的中国改革开放澳工业部长麦克法兰:中澳自由贸易协议蒙古国发现世界最大兽脚类恐龙筑巢地香港展开退休保障公众谘询比谁有钱!曝中超三队哄抢巴西红星 上广州男子吸毒后持刀砍死一名女童比斯利25+17杰特轰6三分 山东双“坦诚相见”:中俄蒙国际冬泳邀请赛开云南少女蒙冤入狱13年其母病逝 返乡云浮今年60多家企业区域性股权交易市“坦诚相见”:中俄蒙国际冬泳邀请赛开广东“指尖上”的“放心菜篮子”走进百环保部:红色预警效用明显 北京污染物美元加息 国际油价触底新低广东惠东制K粉\"始祖\"获死刑 雇中国为现代化城市治理“谋篇布局”37年后,城市工作会议为何与中央经济克宫:印度总理莫迪将访俄会普京 谈多英国民众巨石阵前迎接冬至日2017年吉林省医药健康产业经济规模云南心血管病筛查干预项目启动 符合条驻港官兵携手香港幼童到敬老院慰问长者俄索契一购物中心发生火灾习近平会见伊拉克总理 中伊关系提升为
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘