HeapInspector is a debug tool that monitors the memory heap with backtrace recording in your iOS app. You can discover memory leaks, no longer used objects, abandoned memory and more issues directly on your device without ever starting Instruments.
Basically you can inspect the entire heap and see all living objects of your iOS app.
To be more precise you can record the heap for a specific part of the app. For instance when navigating through the menu. Like in Apple's Instruments the snapshot compares the heap before you started recording. For instance you can start the snapshot before you push a new
UIViewController onto your
UINavigationController stack and stop after popping the
With HeapInspector and heap snapshots you can identify:
HeapInspector gives you detailed information for the living objects:
Since ARC has been introduced we don't need to manage the
release anymore. ARC is very powerful and makes Objective-C more stable. ARC decreased the number of crashes and improves the memory footprint.
ARC is technically doing a powerful job. It knows when to
But ARC doesn't think about the overall architecture how to design for low memory usage. You should be aware that you can still do a lot of things wrong with your memory (even with ARC). You can still get memory pressures or peaks with ARC.
strongproperty lifetime qualifier can be misused (i.e. holding an object twice and longer than needed.)
And that's why we introduced HeapInspector to find those issues.
HeapInspector runs with Objective-C and Swift via CocoaPods
Just add the HeapInspector to your
pod install afterwards.
You can use Carthage. Specify in Cartfile:
Download the repository into your project via git or just as zip.
Drag it the
HeapInspector folder into your Xcode project. See following image.
Make sure to import the header file
Just run the following to start HeapInspector in a separated debug window. The window can be moved on your screen in order to reach all your UI elements. The left circle button starts / stops the memory heap snapshot. See demo above.
We recommend to use a specific class prefixes, Swift modules or even a real classes like
Or just run
start to record all NSObject subclasses.
[HINSPDebug addClassPrefixesToRecord:@[@"RM", @"UITableView"];
Swift You can register modules for the heap snapshot and recordings.
Stopping and removing the inspector's window goes with
Just call the start/stop methods at app launch or via your custom button.
HeapInspector can also record the backtrace for each object that received an alloc, retain, release or dealloc.
Use this only with very specific recorded classes or in smaller apps.
Start the backtrace with
HeapInspector comes with an example project. There you will see a lot of mistakes made with the memory design.
NSTimerthat is not being invalidated properly
strongproperty for the
UIViewControllerthat is pushed onto the