iOS检测内存泄漏

iOS内存处理问题一直是一个比较头疼的问题,有时候面试的时候也会被问到,检测内存泄漏可能大家都会想到Instruments。但是有一个库,非常方便的能检测出内存泄漏。这个库就是MLeaksFinder,GitHub上面可以搜到。

MLeaksFinder

简单介绍一下MLeaksFinder。

官方解释:

具体的方法是,为基类 NSObject 添加一个方法 -willDealloc 方法,该方法的作用是,先用一个弱指针指向 self,并在一小段时间(3秒)后,通过这个弱指针调用 -assertNotDealloc,而 -assertNotDealloc 主要作用是直接中断言。

核心代码:

-(BOOL)willDealloc {

__weak id weakSelf = self;

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

    [weakSelf assertNotDealloc];
});

return YES;
复制代码

}

-(void)assertNotDealloc {

NSAssert(NO, @“”);
复制代码

}

这样,当我们认为某个对象应该要被释放了,在释放前调用这个方法,如果3秒后它被释放成功,weakSelf 就指向 nil,不会调用到 -assertNotDealloc 方法,也就不会中断言,如果它没被释放(泄露了),-assertNotDealloc 就会被调用中断言。这样,当一个 UIViewController 被 pop 或 dismiss 时(我们认为它应该要被释放了),我们遍历该 UIViewController 上的所有 view,依次调 -willDealloc,若3秒后没被释放,就会中断言。

安装:

安装非常简单,直接在Podfile中添加pod 'MLeaksFinder',你不需要在任何文件中引入头文件,执行pod install就行了

案例:

在iOS中,比较常见的内存泄露场景就是循环引用。作为一个iOS工程师,应该时刻警惕循环引用带来的问题。然而在赶工或者稍有不慎的情况下,还是会出现一些有问题的代码。 对于Xcode来说,编译器会对编写代码中明显的循环引用进行提示,比如对于self.property持有的block中,使用self,Xcode就会显示警告。

但是有些你不注意的情况下,Xcode有的就不会警告。

在这个控制器被pop后,MLeaksFinder立刻就弹出了弹窗

找到泄漏的地方改成弱引用 __weak typeof(self) weakSelf = self;

至此,MLeaksFinder的简单使用就介绍完了,真的十分简单就找到了一些潜在的问题,对于工程几乎0入侵,强烈推荐使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值