MST
星途 面试题库

面试题:Swift中Instruments工具用于分析性能时,如何追踪内存泄漏

请描述在Swift项目中,使用Instruments工具检测内存泄漏的基本步骤和关键指标,假设存在一个视图控制器,其中创建了一些对象,怀疑有内存泄漏情况,如何利用Instruments定位问题。
18.2万 热度难度
编程语言Swift

知识考点

AI 面试

面试题答案

一键面试

基本步骤

  1. 打开Instruments:在Xcode菜单栏中选择“Product” -> “Profile”,此时会弹出Instruments应用程序,并自动加载当前的Swift项目。
  2. 选择Leaks模板:在Instruments众多模板中,选择“Leaks”模板。这个模板专门用于检测应用程序中的内存泄漏。
  3. 运行应用并操作:点击Instruments中的录制按钮,开始监控应用程序。然后在模拟器或真机上运行你的Swift项目,并模拟可能导致内存泄漏的操作,例如反复进出怀疑有内存泄漏的视图控制器。
  4. 停止录制:完成操作后,点击Instruments中的停止按钮,停止监控。

关键指标

  • Leaks:此列显示了检测到的内存泄漏块的数量。如果该数值不为0,则表明存在内存泄漏。
  • Address:泄漏内存块的内存地址。
  • Size:泄漏内存块的大小。
  • Responsible Library:负责分配泄漏内存的库。通常是应用程序本身,但也可能是第三方库。
  • Responsible Caller:导致内存泄漏的具体函数调用。这对于定位问题代码非常关键。

定位视图控制器内存泄漏问题

  1. 查看Leaks列表:在Instruments的Leaks面板中,查找与视图控制器相关的内存泄漏。通常,泄漏对象的类名或相关描述会暗示与视图控制器的关系。
  2. 分析Call Stack:点击Leaks列表中的某一泄漏项,查看下方的Call Stack(调用栈)。Call Stack会展示导致内存泄漏的函数调用路径。从这里可以追溯到视图控制器中创建对象但未正确释放的代码位置。
  3. 关注Object Graph:利用Instruments的Object Graph功能。在选定泄漏对象后,可以查看其对象图,了解该对象与其他对象的引用关系。这有助于发现是否存在循环引用等导致内存泄漏的常见问题,例如视图控制器与其他对象之间存在相互强引用,使得它们都无法被释放。