Objective-C中的 Runtime 和编译时有着不同的工作方式。
编译时
Objective-C的编译过程和其他语言类似:
- Preprocessor处理:展开宏、导入头文件等
- 语法解析:检查语法,生成抽象语法树
- 代码生成:生成目标平台的机器码
编译时会进行静态类型检查、符号绑定等工作。
Runtime
Objective-C的Runtime即运行时,是语言动态化的关键。其主要工作有:
- 消息转发 – 动态找到消息的响应者
- 动态方法解析 – 允许完全动态添加方法
- 动态加载类 – 可以在运行时动态加载类
- 类信息查询 – 可以查询类、方法、属性等信息
这使得Objective-C具有极大的灵活性。
区别
编译时进行早期 binding,Runtime Allows 动态操作。编译时优化性能,Runtime 提高灵活性。
合理利用编译时和Runtime各自的优势,可以发挥Objective-C的最大威力。