iOS runtime 理解

首先说一下什么是runtime:

RunTime简称运行时。就是系统在运行的时候的一些机制,其中最主要的是消息机制。对于C语言,函数的调用在编译的时候会决定调用哪个函数( C语言的函数调用请看这里 )。编译完成之后直接顺序执行,无任何二义性。OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。只有在真正运行的时候才会根据函数的名称找 到对应的函数来调用。

举例说明:

比如你[obj makeText];

则运行时就这样的:首先,编译器将代码[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中的函数指针跳转到对应的函数中去执行

已下是相关资料:http://blog.csdn.net/indulgein/article/details/51111472

http://zhidao.baidu.com/link?url=LZudyCopBr1cWuGZBOP-DXRXmunqV9BbIgyXvrhQgtriVDJn8VgPvDPxbfrPu17jc1ZvVSdASGYHn-8BrzILjSroZ01QYM2olYThamDeuf3

http://blog.csdn.net/mingge0107/article/details/50525220

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,774评论 0 9
  • ping怎么这么高? 什么是Runtime? 这还要说?run( 运行)、time(时),runtime(运行时)...
    大大盆子阅读 663评论 1 1
  • 什么是runtime 说到runtime,根据字面意思就是运行期间。但我觉得首先应该说一下oc到底是个什么东西。首...
    Patrick_p阅读 532评论 0 4
  • 在我们刚刚开始学习oc这门语言时,总有一些词我们在各种基础入门教程上反复提到,例如,Objective-C语言是一...
    百有异用是書生阅读 814评论 0 51
  • Runloop 做了一年多的IOS开发,对IOS和Objective-C深层次的了解还十分有限,大多还停留在会用A...
    GitHubPorter阅读 6,083评论 7 17