说起
RunTime
作为iOS开发者就再熟悉不过,面试基本上一大部分原理性的问题都是出自这里。
runtime官方文档
1. 什么是 Runtime?
用c,c ,汇编
共同编写的一套为Object-c
提供动态运行时
功能的API.
2. 运行时
程序执行需要:预编译
->编译
->链接
->可执行文件
->装载到内存中
->程序启动
- 编译时: 源代码翻译为机器代码的过程。在iOS/macOS中是通过
llvm
来完成这一步骤的。主要进行语法、词法分析
; - 运行时: 装载到内存之后,程序启动到程序退出之前都叫做
运行时
。在这个过程中我们所做的所有操作都会有系统动态来处理。
3. Runtime的使用
来自apple
- Obecjctive-C Code: 直接使用OC语法;比如:
[self hello]
,#selector(@"hello")
。 这一步可以通过xcrun
来验证,最终会编译为objc_msgSend
- Framework&Serivce:使用Runtime提供的API接口;比如:
[self class]
,NSSelectorFromString()
这一步可以再lib-objc
中查看源码 - Runtime Api:
objc_msgSend
就是runtime本身的Api - Compiler:广义上来说就是
llvm clang
编译层 - Runtime System Library:编译后的系统
Mach-o
文件