Instruments 是 Apple 提供的一个强大性能分析和调试工具,随 Xcode 一起提供,用于分析 iOS、macOS、watchOS 和 tvOS 应用的运行时行为。

可以用 Instruments 来找出:
1、性能瓶颈(卡顿、CPU 爆高)。
2、内存泄漏(Memory Leak)。
3、内存使用过大(Memory Usage)。
4、线程死锁、线程竞争。
5、UI 卡顿(帧率低)。
6、不必要的磁盘读写。
7、音频、网络延迟问题。
打开方式
有两种方式打开:
方式一:从Xcode启动
在 Xcode 菜单栏:
Product > Profile (快捷键 Cmd + I)
或菜单栏:
Xcode > Open Developer Tool > Instruments

方式二:单独启动
也可以在“聚焦”(快捷键Command + Space空格)上搜索 “Instruments” 启动它:
/Applications/Xcode.app/Contents/Applications/Instruments.app

Instruments 的核心构件:Template 模板

Instruments 提供很多预设的「分析模板」,每个模板分析不同维度。常用的有:
1、Game Performance
用途:用于游戏的整体性能分析。
分析内容:帧率(FPS)、GPU/CPU 协同情况和图形管线效率(Metal)。
适合人群:使用 SpriteKit、SceneKit、Metal、Unity 开发游戏的开发者。
2、Leaks
用途:检测内存泄漏。
分析内容:哪些对象未被释放(Leak),对象在哪分配的。
可以精确指出泄漏位置,建议配合 Allocations 一起使用。
3、Logging
用途:收集 os_log / print / Logger 输出。
分析内容:自定义日志、性能标记(signpost)和分析 Timeline 上的事件流。
Swift 的 Logger 框架(os.Logger) 推荐用法。
4、Metal System Trace
用途:分析 Metal 渲染性能、同步问题。
分析内容:GPU 各阶段耗时,CPU 和 GPU 是否同步良好,shader 执行延迟。
游戏 / 图形应用必须掌握的工具。
5、Network
用途:分析网络请求的性能与使用。
分析内容:请求时间、耗时、状态码,DNS、TLS 握手、重定向等细节,DataTask / DownloadTask 记录。
支持 HTTP 和 App Transport Security (ATS)。
6、Processor Trace
用途:低层级指令级别 CPU 跟踪(极少数人使用)。
分析内容:CPU 指令执行记录(仅在支持的硬件上)。
用途非常专业,主要用于编译器、JIT、内核开发分析。
7、RealityKit Trace
用途:专用于分析 RealityKit 应用(AR/VR)。
分析内容:Entity 生命周期,渲染时序,Anchor 动态等。
仅用于 ARKit + RealityKit 开发者。
8、SceneKit
用途:分析使用 SceneKit 渲染的 3D 内容。
分析内容:节点更新耗时,Scene Graph 结构问题,渲染卡顿点。
建模、AR、3D 可视化类 App 会用到。
9、Swift Concurrency
用途:分析 async/await、Task 等 Swift 并发结构的执行流程。
分析内容:Task 创建、执行、挂起、恢复,Actor 内部调度顺序,不可预测的切换点。
Swift 5.5+ 并发代码的调试利器。
10、SwiftUI
用途:分析 SwiftUI 应用的性能瓶颈。
分析内容:View 重绘频率,Diffing(视图比较)耗时,Transaction 动画延迟。
能看到“哪些 View 更新太频繁”,非常适合 SwiftUI 调优。
11、System Trace
用途:全面的系统级性能分析工具。
分析内容:线程调度,CPU 占用,IO、断电、上下文切换等。
系统级别的最强分析器(适合高级用户)。
12、Time Profiler
用途:分析函数级别的 CPU 使用时间。
分析内容:哪个函数最耗时,CPU 使用率高的代码栈,具体函数执行时间(可展开调用栈)。
最常用的性能分析工具,Swift/ObjC/系统调用都支持。
13、Zombies
用途:检测已经被释放但仍被访问的对象(野指针)。
分析内容:“EXC_BAD_ACCESS” 原因,Zombie 对象的分配与释放路径。
在 ARC 和 ObjC 混用下非常有用(但 Swift 时代已不太常见)。
使用教程
在Xcode中打开项目,选择要分析的Scheme(macOS应用)。

使用快捷键:⌘ + I(Command + I),弹出Instruments 应用,这里选择“SwiftUI”分析模板。

双击“SwiftUI”分析模版,进入Instruments界面。

在Instruments界面,点击左上角的Record按钮,开始录制。

Instruments会自动打开App,在App中执行需要调试的操作(如点按钮跑循环),执行完毕后,回到 Instruments,再次点击左上角的Stop停止录制按钮。
这时,可以在Instruments界面查看:
1、哪些函数最耗时。
2、哪些系统 API 被频繁调用。
3、函数调用路径(调用栈)。
4、UI 更新或后台逻辑是否占用主线程。
如果看到主线程有大量 CPU 使用,说明有优化空间。

总结
通过Instruments可以实现检测泄漏对象、SwiftUI性能等功能,根据需求选择Instruments对应的分析模版。
在Instruments界面中,可以通过左上角的按钮栏,实现运行、停止、快照等控制分析。
中间时间轴,随时间变化用于显示分析数据。
在时间轴左侧选择分析的对象类型,底部显示对象列表,双击对象列表的数据可以显示详细信息。

相关文章
Profiling apps using Instruments:https://developer.apple.com/tutorials/instruments