runtime

作者: Ray_lawq | 来源:发表于2019-02-28 22:19 被阅读0次

    1. 什么是runtime?

    对于Runtime,Apple官方给出的解释是:

    The Objective-C runtime is a runtime library that provides support for the dynamic properties of the Objective-C language, and as such is linked to by all Objective-C apps.

    我们都知道 Objective-C是一门动态语言,这意味着它不仅需要编译器,它还需要运行时系统来进行代码编译。而Runtime就执行了这一运行时系统代码编译工作。

    Runtime直译就是运行时,是Apple用C和汇编语言编写的一套C语言的API,它正是 Objective-C这门动态语言的核心。我们知道计算机唯一能识别的语言是机器语言,高级编程语言不能被直接识别,需要先编译为汇编语言,再由汇编语言编译为机器语言才能被计算机识别。而 Objective-C语言不能被直接编译为汇编语言,它必须先编译为C语言,然后再编译为汇编语言。而Runtime正是编译器将我们写的 Objective-C代码编译为C语言时用到的核心库。

    一句话总结:是由c,c++,汇编实现的一套api,是为了c进化到oc添加的运行时功能

    2. runtime 分为2个版本:

    legacy(2.0以前的)和 modern (2.0以后的)

    3. 其实runtime的所有知识基本都围绕两个中心

    1.类的各个方面的动态配置
    2.消息传递

    要动态配置类就需要知道类的本质是什么,详见我的另一篇博客 《类的底层原理》

    了解了类的结构,那么让我们看看runtime的源码(.h文件);其实所谓的runtime.h只是一组c语音的api,它用的c语言的语法,可以做一些OC做不到的功能。它们能在运行时可以执行获取类,初始化对象,赋值等等的操作,这也就是“动态配置”

    4. 两个本质(面试题):

    oc 对象的本质是一个结构体
    方法的本质是发送消息(msg_send( id self, SEL _cmd ))

    5. runtime 3种调用方式

    1.runtime api 2.NSObjc api 3.objc 上层方法(@selector() )

    runtime 3种调用方式

    1. runtime api
    2. NSObjc api
    3. objc 上层方法(@selector() )

    6. msg_send 介绍和工作原理:

    7. 消息转发流程:

    8. instrumentObjcMessageSends 方法可以打印方法调用流程

    1. 在调用方法的前后开启和关闭
    1. 运行一下

    2. 在Macintosh HD/private/tmp 路径下找到编译的文件,里边就是输出的底层调用方法

    相关文章

      网友评论

          本文标题:runtime

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