1️⃣ Time Profiler
用途:分析 CPU 使用和函数调用热点。
-
解决问题:
- 找出 热函数(hot path)
- 判断函数调用是否过多、循环热点
- 看 泛型调用、动态派发、CoW 是否频繁发生
-
常用技巧:
- 展开 symbol tree → 找到静态/动态派发函数
- 配合
@inline(__always)/@inlinable调整热点函数
-
典型应用:
- 查找 SwiftUI 渲染性能瓶颈
- 泛型与协议存在类型调用开销
2️⃣ Allocations
用途:分析内存分配情况。
-
解决问题:
- 找到 大量堆分配 或 频繁 CoW 触发
- 检查 逃逸到堆的 struct 或 class
- 内存泄漏、重复创建对象
-
常用技巧:
- 过滤 Swift 标准库 / 自定义模块
- 检查 数组 / 字典 / 字符串等 CoW 容器的分配次数
-
典型应用:
- 数组循环频繁写入 → CoW 复制
- 大型 struct 频繁传递 → 堆分配压力
3️⃣ Leaks
用途:检查内存泄漏。
-
解决问题:
- 捕获 retain cycle / ARC 内存泄漏
- class 对象无法释放
-
常用技巧:
- 配合 Instruments 的 Heapshot
- 检查闭包捕获、delegate 弱引用
-
典型应用:
- SwiftUI 或 Combine pipeline 中闭包 retain 循环
4️⃣ Core Animation / Metal / OpenGL
用途:图形渲染性能分析。
-
解决问题:
- UI 渲染帧率低 → 找出 GPU/CPU 渲染瓶颈
- 判断哪些视图层次 / SwiftUI view 导致重绘
-
常用技巧:
- 用 Core Animation → 显示每帧渲染时间
- 用 Color Offscreen / Blended Layers → 找出性能瓶颈
-
典型应用:
- SwiftUI 布局计算热点
- List / LazyVStack 渲染优化
5️⃣ Activity / Signpost
用途:自定义性能跟踪。
-
解决问题:
- 跟踪特定代码块执行时间
- 标记函数入口/出口 → 精确测量热路径
-
常用技巧:
- 使用
os_signpostAPI - 将热点操作标记 → 在 Instruments 中查看耗时
- 使用
-
典型应用:
- 热路径函数调用时间统计
- 协议存在类型 vs 泛型调用性能对比
6️⃣ Thread / Concurrency Instruments
用途:分析多线程和并发问题。
-
解决问题:
- 找出 线程竞争 / 锁等待 / 阻塞点
- 确定并发访问是否导致性能下降
-
常用技巧:
- 配合 DispatchQueue / Actor 模块
- 观察 hotspot 线程上下文切换和排队情况
-
典型应用:
- 并发数据修改 / CoW 触发分析
- UI state 并发访问性能优化
7️⃣ 综合使用策略
- CPU 高耗 → Time Profiler
- 频繁堆分配 → Allocations
- UI 卡顿 → Core Animation + Time Profiler
- 自定义热点 → Signpost
- 并发问题 → Thread / Concurrency
- 内存泄漏 → Leaks
小结:
Instruments 是 CPU、内存、渲染、并发 全面分析工具,常用组合是:
Time Profiler + Allocations + Signpost → 对 Swift 泛型、协议存在类型、CoW 热点最有效