HeapInspector 是一个调试工具,它通过记录回溯在您的 iOS 应用中监视内存堆。您可以直接在设备上发现内存泄漏、不再使用的对象、废弃的内存等问题,而无需启动任何 Instruments。
基本上,您可以检查整个堆,并看到您 iOS 应用的所有活动对象。
更准确地说,您可以针对应用的特定部分记录堆。例如,在浏览菜单时。类似于 Apple 的 Instruments,快照会比较您开始记录之前的堆。例如,您可以在将新的 UIViewController
推送到 UINavigationController
栈之前开始快照,并在弹出 UIViewController
之后停止。使用 HeapInspector 和堆快照,您可以识别
UIImage
HeapInspector 为活动对象提供了详细的信息
自引入 ARC (自动引用计数)以来,我们不需要再管理 retain
& release
。ARC 非常强大,并使 Objective-C 更加稳定。ARC 减少了崩溃的次数并改善了内存占用。
ARC 在技术上做了一件强大而复杂的工作。它知道何时调用 retain、autorelease 和 release。
但 ARC 并不关心整体架构,以及如何设计以降低内存使用。您应该意识到,即使有 ARC,您仍然可以在内存管理上做很多事情(甚至很多错误)。您仍然可以使用 ARC 产生内存压力或峰值。
strong
属性的存活时间限定符可能会被误用(例如,对象持有时间超过所需时间。)@autoreleasepool
。)static
的缓存不正确这就是 why 我们引入了 HeapInspector 去发现这些问题。
请通过 git 将仓库下载到您的项目中,或者直接以 zip 的形式下载。将 HeapInspector
文件夹拖入您的 Xcode 项目中。请看以下图片。
在 Xcode 的构建阶段 -> 编译源文件中添加 -fno-objc-arc
以禁用 NSObject+HeapInspector.m
的 ARC。示例图片见:[拖动](https://raw.github.com/tapwork/HeapInspector/1.0.1/README_Xtras/drag.png) 和 [禁用 ARC](https://raw.github.com/tapwork/HeapInspector/1.0.1/README_Xtras/no_arc.png)
请确保导入头文件
Objective-C
@import HeapInspector;
Swift
import HeapInspector
仅运行以下命令以在单独的调试窗口中启动 HeapInspector。窗口可以移动到您的屏幕上,以便达到所有 UI 元素。左侧的圆形按钮开始/停止内存堆快照。请参见上面的演示。
Objective-C
[HINSPDebug start];
Swift
HINSPDebug.start()
我们建议使用特定的类前缀、Swift 模块,甚至像 UIImageView
这样的真实类。或者,您可以直接运行 start
来记录所有的 NSObject 子类。
Objective-C
[HINSPDebug addClassPrefixesToRecord:@[@"RM", @"UITableView"];
Swift 您可以为堆快照和记录注册模块。
HINSPDebug.addSwiftModulesToRecord(["MyModule", "AnotherFrameworkModule"])
通过以下步骤停止并删除检查器的窗口
Objective-C
[HINSPDebug stop];
Swift
HINSPDebug.stop()
只需在应用程序启动时或通过自定义按钮调用 start / stop 方法即可。
HeapInspector 也可以为每个收到 alloc、retain、release 或 dealloc 的对象记录回溯。仅在使用特定记录的类或较小应用程序中使用此功能。使用以下命令启动回溯
Objective-C
[HINSPDebug recordBacktraces:YES];
Swift
HINSPDebug.recordBacktraces(true)
HeapInspector 伴随着一个示例项目。在那里您将看到许多在内存设计中犯的错误。
strong
委托属性NSTimer
UINavigationController
栈的 UIViewController
的 strong
属性