面试官让你介绍runtime - 该怎么回答才能体现你对系统底层认知的广度和深度。

96 阅读2分钟

这个问题一问出来,就是面试官想试探你对系统底层认知的广度和深度
答得好直接能拉高你的上限感 —— 体现出你对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_msgSendcache_t,又加分。


(3)方法解析与消息转发
  • 当对象收到一个无法响应的Selector,Runtime有一套完整的补救机制:
    • +resolveInstanceMethod: 动态添加方法
    • -forwardingTargetForSelector: 快速转发到其他对象
    • -methodSignatureForSelector:-forwardInvocation: 最终处理转发
  • 这一套是实现AOP、动态代理(比如你用NSProxy)等的基础。

✅ 这里提到 三步转发流程,体现掌握运行时消息异常处理。