0%

内存泄漏检测工具 - JCLeaksFinder

如何优雅地检测内存泄漏 一文介绍了如何在 iOS 中快速高效地检测并修复内存泄漏,要点如下:

  • 使用 MLeaksFinder 等工具找到内存泄漏对象
  • 使用 FBRetainCycleDetector 获取循环引用链
  • (对于被全局对象引用的场景)获取全局对象引用链

JCLeaksFinder

为了方便使用,我把上述功能进行了统一封装,开源了 JCLeaksFinder 项目。JCLeaksFinder 基于 MLeaksFinderFBRetainCycleDetector

  • MLeaksFinder 负责找到内存泄漏对象。
  • FBRetainCycleDetector 负责输出循环引用链。
  • JCGlobalRetainDetector 负责输出全局对象引用链。

特性

作为一款 iOS 内存泄漏检测工具,JCLeaksFinder 主要有以下特性:

  • 支持检测ViewController/View内存泄漏
  • 支持添加自定义白名单
  • 支持自动输出循环引用链
  • 支持自动输出全局对象引用链(自研)
  • 优化接口,使用更方便

检测流程

  1. 在页面退出时触发 MLeaksFinder 检测内存泄漏对象。如果有内存泄漏对象,继续下一步,否则直接跳转到第 5 步。
  2. 使用 FBRetainCycleDetector 检测泄漏对象是否存在循环引用链。如果不存在,继续下一步,否则跳转到第 4 步。
  3. 使用 JCGlobalRetainDetector 检测泄漏对象是否被全局对象引用。如果是,继续下一步,否则跳转到第 5 步。
  4. 将引用信息回传给业务层,业务层可自定义提示形式。
  5. 结束检测。

在上述的检测流程中,如果检测到了内存泄漏对象,可能会遇到以下问题:

  • 该对象是允许不被释放的。此时可添加检测白名单,避免继续检测出该对象。
  • 该对象并没有输出任何循环引用链或者全局对象引用链信息。此时可使用 Xcode Memeory Graph 继续定位具体原因。

更多信息请前往 Github查看项目源码