Instruments 性能分析
问题
Instruments 有哪些常用工具?如何使用?
答案
常用 Instruments 工具
| 工具 | 作用 |
|---|---|
| Time Profiler | CPU 采样,定位耗时函数 |
| Allocations | 内存分配追踪,Mark Generation 找泄漏 |
| Leaks | 实时检测内存泄漏(循环引用) |
| Core Animation | 帧率检测、离屏渲染标记 |
| Network | 网络请求追踪 |
| Energy Log | 电量消耗分析 |
Time Profiler 使用要点
- Call Tree 设置:勾选 "Separate by Thread"、"Invert Call Tree"、"Hide System Libraries"
- 关注 Main Thread:主线程耗时 > 16ms 就会掉帧
- 看 Self Weight:函数自身耗时(不含子函数)
Allocations Mark Generation
步骤:
1. 打开 Allocations 工具
2. 操作到达某个页面
3. 点击 "Mark Generation"(标记当前内存快照)
4. 返回上一页面
5. 再次 "Mark Generation"
6. 如果 Generation 间有持续增长的对象 → 可能泄漏
更简单的方案
Xcode 自带 Memory Graph Debugger(调试栏摄像机图标旁边的三个圆圈按钮),可以直观看到对象引用关系,紫色感叹号标记疑似泄漏。
常见面试问题
Q1: Time Profiler 和 System Trace 的区别?
答案:
- Time Profiler:采样 CPU 调用栈,用于定位 CPU 密集型函数
- System Trace:追踪线程调度、中断、系统调用,用于分析线程阻塞、锁等待等问题
Q2: Release 模式和 Debug 模式性能差异大吗?
答案:非常大。Release 开启编译器优化(-O),速度可能比 Debug 快 2-10 倍。必须用 Release 模式做性能测试。Instruments 默认以 Release 配置 Profile。