用途:审查 Swift 代码在运行时层面的性能成本,关注分配、ARC 流量、派发、特化、拷贝、优化器可见性与不安全内存边界,帮助区分真实热路径成本与理论微优化。
适用场景:涉及堆分配、栈与堆存储、对象布局、装箱值或闭包上下文;ARC retain/release、所有权、生命周期、weak/unowned 引用或闭包捕获;直接派发、类派发、Objective-C 派发、witness 派发或热路径中的动态派发;any Protocol、some Protocol、泛型、类型擦除、特化或未特化热代码;写时复制集合、大值、自定义 COW 存储或重复拷贝;优化 SIL 检查、编译器优化、内联、去虚拟化或特化证据;unsafe Swift、指针生命周期、内存绑定、别名、缓冲区变更或安全包装;影响优化器可见性的模块边界、@inlinable、@usableFromInline、@frozen 或公共 API 弹性权衡。不适用于一般 Swift 语法或 API 使用、启动问题、SwiftUI 身份/失效/布局/滚动、Swift Concurrency 任务生命周期与 actor 隔离、性能分析工具选择等;若任务更具体应路由到相应技能。
核心原则:不要仅凭源码外观优化,先判断是否在热路径、怀疑何种运行时成本、是否有测量或编译器输出证据、修改是否保持语义、引入何种权衡。运行时成本分类包括分配、ARC、派发、存在类型与泛型、拷贝、编译器优化、不安全边界、模块边界。
工作流:定位用户可见症状,确认热路径,分类成本,寻找证据(Instruments、Allocations、Time Profiler、优化 SIL、基准测试、XCTest 性能测试、生产信号),区分语义与机制,提出最小安全修改,说明权衡,并做前后验证。
决策要点:非热路径避免底层重写;分配问题先看类实例、闭包上下文、装箱、存在类型存储、类型擦除包装、中间集合与桥接;ARC 先看所有权与生命周期,weak/unowned 是所有权工具非性能工具;派发问题确认动态派发是否有意,应用层类可优先 final;any Protocol 在需要运行时异构时合理;泛型帮助取决于是否特化;COW 关注变更模式与唯一性边界;SIL 结论应基于优化 SIL 而非 Debug SIL;不安全代码不应作为首选,必须缩小到安全包装内;模块边界属性不是通用加速开关。
限制与注意:struct 不保证栈分配,class 不等于性能缺陷,值语义仍可能涉及堆存储与 ARC,Array/String/Dictionary/Set/Data 可能隐藏引用存储,some Protocol 不是 any Protocol 的通用替代,@inline(__always) 可能增大代码体积,@inlinable 是 API/ABI 承诺,Debug 构建行为不能作为优化性能证据,不要为微优化牺牲可读架构。输出应包含摘要、疑似成本分类、热路径评估、待查证据、发现、最小修改建议、权衡与验证方式。