简介
Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的。比如:
[receiver message];
// 底层运行时会被编译器转化为:
objc_msgSend(receiver, selector)
// 如果其还有参数比如:
[receiver message:(id)arg...];
// 底层运行时会被编译器转化为:
objc_msgSend(receiver, selector, arg1, arg2, ...)
以上你可能看不出它的价值,但是我们需要了解的是 Objective-C 是一门动态语言,它会将一些工作放在代码运行时才处理而并非编译时。也就是说,有很多类和成员变量在我们编译的时是不知道的,而在运行时,我们所编写的代码会转换成完整的确定的代码运行。
因此,编译器是不够的,我们还需要一个运行时系统(Runtime system)来处理编译后的代码。
Runtime 基本是用 C 和汇编写的,由此可见苹果为了动态系统的高效而做出的努力。苹果和 GNU 各自维护一个开源的 Runtime 版本,这两个版本之间都在努力保持一致。
点击这里下载苹果维护的开源代码。
Runtime 的作用
Objc 在三种层面上与 Runtime 系统进行交互:
- 通过 Objective-C 源代码
- 通过 Foundation 框架的 NSObject 类定义的方法
- 通过对 Runtime 库函数的直接调用
Objective-C 源代码
多数情况我们只需要编写 OC 代码即可,Runtime 系统

本文介绍了Objective-C Runtime在iOS开发中的重要性,它是Objective-C成为动态语言的基础。Runtime通过Objective-C源代码、Foundation框架的NSObject类以及直接调用Runtime库函数三种方式与开发者交互。文中还提到了Aspects库,它是AOP(面向切面编程)在iOS中的实现,用于方法拦截和Hook,同时讨论了其源码解析和应用中的安全问题。
最低0.47元/天 解锁文章
887

被折叠的 条评论
为什么被折叠?



