Runtime 和消息机制
2015-07-21 08:21
260 查看
RunTime简称运行时。就是系统在运行的时候的一些机制,其中最主要的是消息机制。对于C语言,函数的调用在编译的时候会决定调用哪个函数(
C语言的函数调用请看这里 )。编译完成之后直接顺序执行,无任何二义性。OC的函数调用成为消息发送。属于动态调用过程。
在编译的时候并不能决定真正调用哪个函数(事实证明,在编译阶段,OC可以调用任何函数,即使这个函数并未实现,只要声明过就不会报错。而C语言在编译阶段就会报错)。只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。
那OC是怎么实现动态调用的呢?OC通过发送消息来达到动态调用的秘密。
1 | [obj makeText]; |
1 | objc_msgSend(obj,@selector(makeText)); 首先我们来看看obj这个对象,iOS中的obj都继承于NSObject。
|
首先,编译器将代码[obj makeText];转化为objc_msgSend(obj, @selector (makeText));,在objc_msgSend函数中。首先通过obj的isa指针找到obj对应的class。
在Class中先去cache中通过SEL查找对应函数method(猜测cache中method列表是以SEL为key通过hash表来存储的,这样能提高函数查找速度),若
cache中未找到。再去methodList中查找,若methodlist中未找到,则取superClass中查找。若能找到,则将method加入到cache中,以方便下次查找,并通过method中的函数指针跳转到对应的函数中去执行。
相关文章推荐
- 在Nginx上部署ThinkPHP,解决Pathinfo问题
- JSP JSTL EL 删除空行 <%@ page trimDirectiveWhitespaces="true" %>
- 这个故事会叫多少男人惭愧?多少女人掉泪?
- 我所认识的SAP系统
- 计蒜客428俩个8位制年月日之间的差值
- bzoj3160: 万径人踪灭
- phpcms导航标签(含一级二级)
- phpcms导航标签(含一级二级)
- ios开发之电子优惠券的设计与实现
- [Usaco2008 Dec][BZOJ1589] Trick or Treat on the Farm 采集糖果
- HTML学习笔记——列表和table
- IOS开发之电子菜单的设计与实现(继承、封装、多态)
- eclipse插件开发入门——使用command实现在资源管理器中定位资源
- 网站开发之用户重设密码 找回密码功能的实现原理
- Classical algorithms
- 我国众筹平台已达211家 今年上半年增53家
- hd1238
- Bootstrap网站模板
- vi 编辑器使用错误
- BZOJ 1492 货币兑换 cdq分治或平衡树维护凸包