面试题答案
一键面试- 使用Instruments定位循环引用导致的内存泄漏:
- 步骤一:打开Instruments
- 打开Xcode,选择“Product” -> “Profile”,这会自动启动Instruments并加载你的Objective - C项目。
- 步骤二:选择Leaks模板
- 在Instruments中,选择“Leaks”模板。这个模板专门用于检测内存泄漏。
- 步骤三:运行项目
- 在Instruments中点击“Record”按钮开始记录,然后在你的iOS模拟器或真机上运行Objective - C项目。执行与类A和类B相关的操作,确保触发可能存在的循环引用场景。
- 步骤四:分析Leaks结果
- 当你认为可能已经触发循环引用后,停止记录。Instruments会展示内存泄漏的相关信息。查看Leaks列表,找到疑似由类A和类B循环引用导致的泄漏对象。
- 步骤一:打开Instruments
- 从Instruments分析结果判断循环引用造成的内存泄漏:
- 对象存活分析:
- 在Leaks报告中,如果发现类A和类B的实例对象一直存在,即使它们应该已经超出作用域并被释放,这可能是循环引用的迹象。例如,在正常情况下,当包含类A和类B实例的某个方法执行完毕后,它们应该被释放,但在Leaks报告中仍能看到它们,说明存在引用使其无法被释放。
- 引用链分析:
- 点击Leaks报告中的泄漏对象,Instruments会展示该对象的引用链。如果在引用链中看到类A引用类B,同时类B又反向引用类A,形成了一个闭环引用链,那么可以基本确定是由循环引用造成的内存泄漏。例如,引用链显示A -> B -> A,这就表明A和B之间存在循环引用导致对象无法被释放,从而产生内存泄漏。
- 对象存活分析: