美文网首页
runtime的简单理解

runtime的简单理解

作者: 吃大米的小蚂蚁 | 来源:发表于2016-08-05 18:50 被阅读35次

原文链接:http://blog.csdn.net/mumubumaopao/article/details/51924964

最近闲了下来,有时间了就研究一下runtime的运行机制,之前做开发的时候一直也没有特别关注这个东西,只是知道有,但是很少去刻意的使用,研究的不是很深,简单说一下吧,有错误的地方欢迎大家随时指正.

Objective-C Runtime 是什么?

Objective-C 的 Runtime 是一个运行时库(Runtime Library),它是一个主要使用 C 和汇编写的库,为 C 添加了面相对象的能力并创造了 Objective-C。这就是说它在类信息(Class information) 中被加载,完成所有的方法分发,方法转发,等等。Objective-C runtime 创建了所有需要的结构体,让 Objective-C 的面相对象编程变为可能.

之前对于runtime的理解,只是仅仅局限于对变量或者对象的类型由编译时推迟到了运行时.比如定义一个NSString类型的变量,语句这么写

则会输出

很明显,当我们定义了NSSring类型的变量str之后,其类型并没有确定下来,而是等到运行的时候,才确定了对象的体现.

但是这并不是今天要说的重点,如果运行时只有这点功能的话,那么苹果的工程师也就太大材小用了,运行时最重要的作用还是体现在消息机制上.

我们都知道,OC是一门面向对象的语言,很多时候在解决问题的时候都是站在面向对象的角度来考虑.比如我要建设一座房子,我并不需要考虑如何去建设,只需要考虑把这个任务分给几个人去做,比如A制作窗户,B制作门,C制作屋顶….我只需要考虑把这些任务分配给几个人去做,至于他们是怎么实现的我并不需要考虑.就拿给A分配任务来说,调用下面的方法:

以下是对参数的具体详解,其代码部分来自runtime的源代码,引自:http://blog.csdn.net/uxyheaven/article/details/38113901

version类的版本信息,默认为0

info供运行期使用的一些位标识。

instance_size该类的实例变量大小

ivars成员变量的数组

structobjc_ivar_list {

intivar_count;

/* variable length structure */

structobjc_ivar ivar_list[1];

}

methodLists方法定义的数组

structobjc_method_list {

structobjc_method_list*obsolete;

intmethod_count;

/* variable length structure */

structobjc_method method_list[1];

}

objc_cache指向最近使用的方法.用于方法调用的优化.

structobjc_cache {

unsignedintmask/* total = mask + 1 */;

unsignedintoccupied;

Method buckets[1];

};

protocols协议的数组

structobjc_protocol_list {

structobjc_protocol_list*next;

longcount;

Protocol*list[1];

};

调用objc_msgSend函数的时候,首先会使用@selector(makeWindow)产生的SEL去class的cache里去查找函数的指针,如果在这里找到的话,则直接调用;如果没有找到的话,则去methodList里查找函数的指针,找到的话直接调用,没有找到的话则去super_class里查找,找到后将该函数指针缓存到cache里方便下次的查找.

加入审核被拒交流群,一起交流审核上架经验吧~~ 群号:689757099

相关文章

  • 简单理解runtime

    runtime是一套底层的C语言API,包含很多强大实用的C语言数据类型、C语言函数 平时我们编写的代码,底层都是...

  • 简单理解runtime

    runtime简称运行时机制,其中最主要的是消息机制,也是oc的一大特点。 对于c语言而言,在编译的时候就会去决定...

  • runtime的简单理解

    原文链接:http://blog.csdn.net/mumubumaopao/article/details/51...

  • iOS runtime笔记一

    参考资料 南峰子的runtime 一【OC刨根问底】Runtime简单粗暴理解 对象的理解,元类(meta cla...

  • objective-C之runtime第一篇

    网上查看了一些runtime的资料, 关于runtime是什么?这里想用自己的理解,简单点说:runtime是一套...

  • iOS Runtime简单理解

    简介 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 O...

  • runtime简单粗暴的理解

    关于runtime是什么,我这边不做过多解释,百度上一大堆。但是,看看概念,很多人都难以真正理解和使用好r...

  • Runtime基础运用实践和总结

    runtime的理解 今天同学问我什么是runtime,我想了想就简单总结出了这篇文章,以下仅供参考. 我所理解的...

  • Runtime 简单理解及使用

    什么是runtime? runtime 是 OC底层的一套C语言的API(引入或),编译器最终都会将OC代码转化为...

  • 简单理解 OC 中的 runtime

    runtime 是 OC 中一套底层的c语言API(包括

网友评论

      本文标题:runtime的简单理解

      本文链接:https://www.haomeiwen.com/subject/bbtksttx.html