这个问题一问出来,就是面试官想试探你对系统底层认知的广度和深度。
答得好直接能拉高你的上限感 —— 体现出你对iOS不仅停留在表层用法,而是理解它是怎么跑起来的。
iOS Runtime机制标准回答框架
1. 总结一句话(开头总览)
iOS Runtime机制,指的是Objective-C程序在运行时,由一个动态库
libobjc.A.dylib负责管理的动态类型系统和消息传递机制,它让Objective-C具有了面向消息的动态特性,比如动态创建类、方法替换、消息转发等。
关键词:动态性、libobjc.A.dylib、消息传递。
(第一句定框架,显得你思路清晰。)
2. 划重点讲:runtime主要做的几件事
Runtime机制主要包含四大核心部分:
- 动态类型系统(Dynamic Typing)
- 动态方法调用(Message Sending)
- 方法解析与转发(Method Resolution & Message Forwarding)
- 元编程能力(Meta-programming,动态修改类、方法、属性等)
(这时候面试官就知道你有清晰的内部分类了。)
3. 细讲每一块(重点细节加分)
(1)动态类型系统
- Objective-C对象在运行时才知道自己的类型(Class)。
- 每个对象内部有一个隐藏的
isa指针,指向它的Class对象。 - Class对象本质也是一个结构体(
objc_class),里面包含:- 方法列表(methods)
- 属性列表(properties)
- 协议列表(protocols)
- 指向父类的指针(superclass)
- 还有自己的meta-class指针(元类结构)
✅ 这里提到 isa指针 和 Class结构,可以直接体现底层理解。
(2)动态方法调用(Message Sending)
- Objective-C方法调用本质是发送消息:
objc_msgSend。 - 编译时不直接绑定函数地址,而是到运行时,查找类的方法列表,找到对应的IMP(函数指针)执行。
- 优化:
objc_msgSend内部做了大量缓存优化,比如:- 方法缓存(cache_t)
- 快速查找(两层哈希结构)
✅ 这里提到 objc_msgSend 和 cache_t,又加分。
(3)方法解析与消息转发
- 当对象收到一个无法响应的Selector,Runtime有一套完整的补救机制:
+resolveInstanceMethod:动态添加方法-forwardingTargetForSelector:快速转发到其他对象-methodSignatureForSelector:和-forwardInvocation:最终处理转发
- 这一套是实现AOP、动态代理(比如你用NSProxy)等的基础。
✅ 这里提到 三步转发流程,体现掌握运行时消息异常处理。