美文网首页
Objective-C Runtime 运行时

Objective-C Runtime 运行时

作者: liang1030 | 来源:发表于2019-07-21 14:40 被阅读0次

    一,简介:

     Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等。

     这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。对于Objective-C来说,这个运行时系统就像一个操作系统一样:它让所有的工作可以正常的运行。这个运行时系统即Objc Runtime。Objc Runtime其实是一个Runtime库,它基本上是用C和汇编写的,这个库使得C语言有了面向对象的能力。

     1.RunTime简称运行时。OC就是"运行时机制",也就是在运行时候的一些机制,其中最主要的是消息机制。

     2.对于C语言,"函数的调用在编译的时候会决定调用哪个函数”.

    3.对于OC的函数,属于"动态调用"过程,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。

     4.事实证明:

    1>在编译阶段,OC可以"调用任何函数",即使这个函数并未实现,只要声明过就不会报错。 2>在编译阶段,C语言调用"未实现的函数"就会报错。

     Runtime库主要做下面几件事:

     1,封装:在这个库中,对象可以用C语言中的结构体表示,而方法可以用C函数来实现,另外再加上了一些额外的特性。这些结构体和函数被runtime函数封装后,我们就可以在程序运行时创建,检查,修改类、对象和它们的方法了。

     2,找出方法的最终执行代码:当程序执行[object doSomething]时,会向消息接收者(object)发送一条消息(doSomething),runtime会根据消息接收者是否能响应该消息而做出不同的反应。

    二、RunTime作用

    1.发送消息

    a> 方法调用的本质,就是让对象发送消息。

    b> objc_msgSend,只有对象才能发送消息,因此以objc开头.

    c> 使用"消息机制"前提,必须导入#import

    d> 消息机制简单使用

    2.交换方法

    a> 开发使用场景:系统自带的方法功能不够,给系统自带的方法扩展一些功能,并且保持原有的功能。

    b> 方式一:继承系统的类,重写方法.

    c> 方式二:使用runtime,交换方法.

    3.动态添加方法

    a>开发使用场景:如果一个类方法非常多,加载类到内存的时候也比较耗费资源,需要给每个方法生成映射表,可以使用动态给某个类,添加方法解决。

    b>经典面试题:有没有使用performSelector,其实主要想问你有没有动态添加过方法。

    4.给分类添加属性

     a>原理:给一个类声明属性,其实本质就是给这个类添加关联,并不是直接把这个值的内存空间添加到类的内存空间。

    5.字典转模型

    相关文章

      网友评论

          本文标题:Objective-C Runtime 运行时

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