iOS内存泄漏检测

本文介绍了iOS应用中常见的内存泄漏检测方法,包括使用系统自带的leaks工具和第三方工具MLeaksFinder、PLeakSniffer。接着,文章详细讨论了五种常见的内存泄漏情况:UIViewController与子UIView的双向持有、Delegate循环引用、block引起的循环引用、NSNotificationCenter和KVO问题,以及NSTimer和Animator的处理。针对这些问题,提供了相应的解决方案,如使用weak引用、及时移除监听和停止定时器等。
摘要由CSDN通过智能技术生成

项目开发有一段时间了,一直没有时间检测内存情况,今天检测了一下内存,综合了几种情况

一、内存泄漏检测方法

(1) 可以使用系统自带的leaks,在测试app的时候打开leaks,很准确哦
(2)也可使用第三方,可以检测某个UIViewController和UIView中内存泄漏,推荐使用轻量级的内存泄漏检测工具。

1、MLeaksFinder
介绍:MLeaksFinder:精准 iOS 内存泄露检测工具

2、PLeakSniffer
介绍:iOS内存泄漏自动检测工具PLeakSniffer

二、常见内存泄漏情况

1、UIViewController 和 子UIView中双向持有对方
@interface MyViewController: UIViewController   
     //1.MyViewController 中强引用 childView 
    @property (nonatomic, strong) ChildView *childView;    
@end
----------------------------------------------------- 
@interface ChildView : UIView
    @property (nonatomic, strong) MyViewController *controller;
    -(instancetype)initWithController:(MyViewController *)controller;
@end
//implement
    -(instancetype)initWithController:(MyViewController *)controller{
        self = [super init];
        if(self){
            //2.这一步让View,强引用 MyViewController
            self.controller = controller;
        }
        return self;
    }

如上代码所示,1,2中让两个对象双向强引用,导致两者都不会被释放。
解决方案:
把2这一步换成weak

@property (nonatomic, weak) MyViewController *controller;
2、Delegate循环引用

还是引用上面的案例,这次我们改成delegate版本

@interface MyViewController: UIViewController 
//1.MyViewController 中强引用 childView 
    @property (nonatomic, strong) ChildView *childView; 
@end 
//
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值