Swift 面试:泛型、协议与派发源码解析

Swift 面试:泛型、协议与派发源码解析 Swift 面试里,泛型和协议经常不是单独问语法,而是连着问:Swift 中函数派发机制有哪几种?泛型是编译期还是运行期机制?协议调用为什么可能慢?some 和 any 为什么性能不同?Protocol Witness Table 到底是什么? 这篇文章按面试题展开,把答案落到 Swift 编译器里的 Generic Signature、Generic Specializer、SIL 调用指令、Protocol Witness Table、class vtable 和 Devirtualize 优化。 面试高频问题 Swift 中函数派发机制有哪几种? 直接派发、class vtable 派发、witness table 派发、Objective-C 消息派发分别适用于什么场景? function_ref、class_method、witness_method、objc_method 在 SIL 里分别代表什么? 如何用 swiftc -emit-silgen / swiftc -emit-sil -O 观察派发指令? dynamic / @objc dynamic 会怎样影响派发? 如何用代码对比泛型、some、any 的派发和性能差异? Swift 泛型是运行时泛型还是编译期泛型? Generic Signature 是什么?它保存哪些信息? 泛型特化为什么能提升性能? Protocol Witness Table 是什么? 协议方法调用什么时候是静态派发,什么时候是动态派发? some Protocol 和 any Protocol 的本质区别是什么? final、private、具体类型为什么有利于优化? 协议扩展里的方法一定是动态派发吗? class_method 和 witness_method 有什么区别? 面试里如何解释“Swift 既强调协议,又强调性能”? 30 秒回答版 Swift 函数派发面试不要只答“静态派发和动态派发”。更完整的分类是:直接派发、class vtable 派发、protocol witness table 派发、Objective-C 消息派发,再补充优化器可能把动态调用去虚拟化成直接调用。 ...

June 16, 2026