MLeaksFinder 1.0.0

MLeaksFinder 1.0.0

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最新发布2017年9月

Zeposhe维护。



  • Zeposhe

中文介绍 | FAQ中文

MLeaksFinder

MLeaksFinder可以帮助您在开发阶段快速找出iOS应用程序中的内存泄漏。它能够自动发现UIView和UIViewController对象的内存泄漏,并在发生内存泄漏时,在泄漏对象的View-ViewController堆栈上显示一个警告。此外,使用FBRetainCycleDetector尝试分析泄漏对象的引用循环。除了在UIView和UIViewController对象中查找泄漏之外,开发者还可以扩展它以在其他类型的对象中查找泄漏。

交流

QQ群组:482121244

安装

pod 'MLeaksFinder'

在运行pod install之后,MLeaksFinder才会生效,不需要添加任何代码或导入任何头文件。

使用方法

MLeaksFinder可以自动查找UIView和UIViewController对象的内存泄漏。当发生内存泄漏时,它会在泄漏对象的View-ViewController堆栈上显示一个警告。

Memory Leak
(
    MyTableViewController,
    UITableView,
    UITableViewWrapperView,
    MyTableViewCell
)

在上述示例中,我们确信MyTableViewControllerUITableViewUITableViewWrapperView的实例已经被成功释放,而MyTableViewCell的实例没有被释放。

MLeaksFinder还可以尝试使用FBRetainCycleDetector查找泄漏对象的引用循环。

Retain Cycle
(
    "-> MyTableViewCell ",
    "-> _callback -> __NSMallocBlock__ "
)

从输出中我们知道,MyTableViewCell对象有一个名为_callback__strong实例变量,其类型为__NSMallocBlock__。同时,该_callback也有一个指向MyTableViewCell__strong引用。

静音断言

如果您的类被设计为单例类,或者由于某些原因,您的类不应该被释放,请在您的类中重写- (BOOL)willDealloc方法并返回NO。

- (BOOL)willDealloc {
    return NO;
}

查找其他对象的内存泄漏

MLeaksFinder默认在UIView和UIViewController对象中查找内存泄漏。但是,您可以通过扩展它来在一个基于UIViewController对象的整个对象图中查找内存泄漏。

- (BOOL)willDealloc {
    if (![super willDealloc]) {
        return NO;
    }
    
    MLCheck(self.viewModel);
    return YES;
}