MSVCLeakHunter 1.0.0

MSVCLeakHunter 1.0.0

测试已测试
语言语言 Obj-CObjective C
许可证 Apache 2
发布最近发布2014年12月

Javier Soto 维护。



  • 作者
  • Javier Soto

这是一个简单易用的工具,用于发现当您希望时未释放 View Controllers。

与使用 blocks 的保留周期结合使用时,这种情况非常普遍。有时很难意识到某些视图控制器永远不会被释放,因为在使用 Instruments 时它们不会显示为泄漏。

安装

  • MSVCLeakHunter.hMSVCLeakHunter.m 添加到 Xcode 项目中。
  • 在应用程序初始化期间(例如,您的应用程序委托中的 applicationDidFinishLaunchingWithOptions: 方法)调用 +[MSVCLeakHunter install] 位置的某个位置。
  • 确保将 MSVCLeakHunter_ENABLED 设置为 1 在 MSVCLeakHunter.h

或者通过 Cocoapods 安装: pod 'MSVCLeakHunter'

外观

  • 当您启用 MSVCLeakHunter 并运行应用程序,并且找到可能存在泄漏的视图控制器时,您将看到以下内容

示例项目的截图

兼容性

  • MSVCLeakHunterARC非 ARC 项目兼容。

它如何工作

如果您查看 MSVCLeakHunter.m 中的实现,它会非常天真。它所做的只是对每个 UIViewController 实例的一些方法进行交换(它会在视图控制器从屏幕消失时接收到 一个 viewDidDisappear: 调用),但在一定时间后没有释放。

如果发生这种情况,这并不保证视图控制器100%泄漏。例如,如果它位于一个 UITabBarController 中,当您选择另一个标签时,它可能消失,但它仍然被标签栏保留,并没有泄漏。

但这将帮助您发现,例如,您将导航控制器堆栈推向视图控制器,并且在您通过点击后退按钮弹出时不会释放。

在这种情况下,如果您有一个类似导航控制器的内容,在它以模式显示后,然后在模态关闭时整个堆栈消失,您可能需要调整 kMSVCLeakHunterDisappearAndDeallocateMaxInterval 的值(在 中查看 MSVCLeakHunter.h)以给 MSVCLeakHunter 足够的余地以避免误报。否则,如果模态关闭时间较长,您可能会在堆栈底部看到关于控制器的可能泄漏的日志。

授权协议

版权所有 © 2012 MindSnacks

遵循 Apache License 2.0(“授权协议”);除非符合本授权协议,否则不得使用本文件。您可以在以下地址获取授权协议的副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律强制要求或书面同意,否则根据本授权协议分发软件时不得附带任何形式的保证或条件,无论是明示的、隐含的或其他方式。有关授权和限制的具体表述,请参阅授权协议。