Runtime知识点

Posted ioswws

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Runtime知识点相关的知识,希望对你有一定的参考价值。

Runtime是什么

Runtime 又叫运行时,是一套底层的 C 语言 API,其为 ios 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的。

为什么需要Runtime

Objective-C 是一门动态语言,它会将一些工作放在代码运行时才处理而并非编译时。也就是说,有很多类和成员变量在我们编译的时是不知道的,而在运行时,我们所编写的代码会转换成完整的确定的代码运行。

因此,编译器是不够的,我们还需要一个运行时系统(Runtime system)来处理编译后的代码。

Runtime 基本是用 C 和汇编写的,由此可见苹果为了动态系统的高效而做出的努力。苹果和 GNU 各自维护一个开源的 Runtime 版本,这两个版本之间都在努力保持一致。

Runtime 的作用

OC 在三种层面上与 Runtime 系统进行交互:

1.通过 Objective-C 源代码

只需要编写 OC 代码,Runtime 系统自动在幕后搞定一切,调用方法,编译器会将 OC 代码转换成运行时代码,在运行时确定数据结构和函数。

2.通过 Foundation 框架的 NSObject 类定义的方法

Cocoa 程序中绝大部分类都是 NSObject 类的子类,所以都继承了 NSObject 的行为。(NSProxy 类时个例外,它是个抽象超类)
一些情况下,NSObject 类仅仅定义了完成某件事情的模板,并没有提供所需要的代码。例如 - description方法,该方法返回类内容的字符串表示,该方法主要用来调试程序。NSObject类并不知道子类的内容,所以它只是返回类的名字和对象的地址,NSObject的子类可以重新实现。
还有一些NSObject的方法可以从Runtime系统中获取信息,允许对象进行自我检查。例如:

  • class方法返回对象的类;
  • isKindOfClass: 和 -isMemberOfClass: 方法检查对象是否存在于指定的类的继承体系中(是否是其子类或者父类和是否是当前类的成员变量);
  • respondsToSelector: 检查对象能否响应指定的消息;
  • conformsToProtocol:检查对象是否实现了指定协议类的方法;
  • methodForSelector: 返回指定方法实现的地址。

3.通过对 Runtime 库函数的直接调用

Runtime 系统是具有公共接口的动态共享库。头文件存放于/usr/include/objc目录下,这意味着我们使用时只需要引入objc/Runtime.h头文件即可。
许多函数可以让你使用纯 C 代码来实现 Objc 中同样的功能。除非是写一些 Objc 与其他语言的桥接或是底层的 debug 工作,你在写 Objc 代码时一般不会用到这些 C 语言函数。

 

runtieme 可能被问到的问题

https://www.jianshu.com/p/8345a79fd572




以上是关于Runtime知识点的主要内容,如果未能解决你的问题,请参考以下文章

(转)iOS-Runtime知识点整理

Runtime知识点

iOS-『Runtime』详解基础知识

Cocoa Runtime系统知识整理

iOS:runtime最全的知识总结

Runtime相关知识