新版XCode7.2.1的Instruments测试内存泄露

66 篇文章 0 订阅

工具:

XCode7.2.1

Instruments 7.2.1


网上搜索了那么多的XCode检测内存泄露的Instruments使用,但是都是XCode5.几的版本,太老了,今天博主就分享博主最新测试的内存泄露使用方法,如有错误之处,请在下方随意批评并指点,博主万分感激!~~


看完后请点赞!谢谢~大笑



博主故意做了一个内存泄露的代码,ARC环境下的循环引用


代码:

#import "ZRViewController.h"

@class Person1;
@interface Person2 : NSObject
@property (nonatomic, strong) Person1 *person;
@end
@implementation Person2
- (void)dealloc
{
    NSLog(@"Person2 dealloc");
}
@end

@interface Person1 : NSObject
@property (nonatomic, strong) Person2 *person;
@end
@implementation Person1
- (void)dealloc
{
    NSLog(@"Person1 dealloc");
}
@end


@interface ZRViewController()
@property (nonatomic, strong) Person1 *p1;
@property (nonatomic, strong) Person2 *p2;
@end

@implementation ZRViewController

- (Person1 *)p1
{
    if(!_p1){
        _p1 = [[Person1 alloc] init];
    }
    return _p1;
}

- (Person2 *)p2
{
    if(!_p2){
        _p2 = [[Person2 alloc] init];
    }
    return _p2;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.view setBackgroundColor:[UIColor purpleColor]];
    
    
    [self p2];
    [self p1];
    self.p1.person = self.p2;
    self.p2.person = self.p1;
    

    
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self dismissViewControllerAnimated:YES completion:nil];
}


- (void)dealloc
{
    NSLog(@"ZRViewController dealloc");
}

@end

这个是源文件中的代码,头文件中就不写了


其中p1指向p2,p2指向p1,两个对象都是强引用,并且互相指向,故而造成内存泄露生气


点击Profile,出现





新版的Instruments和以前旧版本长的不一样,选择Choose后,



博主的项目是ceshi,Leaks表示测试的是内存泄露


注意这里要指定 测试项目 , 点击左上角的红色按钮,开始启动测试,这时候,模拟器会启动应用,然后点击模拟器,instruments会记录各个代码的泄露问题,如果出现内存泄露,在上方的红色叉叉就是,点击红色叉叉,会进入泄露的代码位置,双击它就可以进入项目中的代码


如图:

搜索自己的类,原因是太多了,太难找

本身Person1或者Person2类只占用16字节,但是由于未释放,且互相指向,又占用16字节,等于32字节,如果我继续点击项目让它继续内存泄露,它还会占用一倍的内存

上面的红色叉叉就是表示该位置有内存泄露,点击它,就可以进入查看


博主刚才手欠,又点击了一下大笑,看看结果,与上图相比

引用计数加一,占用内存加16字节


点击那个叉叉(内存泄露位置)


四个对象,各占16字节,属于ZRViewController控制器的


比如:

进入Person2的对象创建和销毁,

清晰的看到对象的创建与销毁的引用计数


下面解释上面的表格title的英文意思

Category  类名


persistent Bytes:当前活跃的内存

persistent:当前活跃的内存数量

Transient:当前已经分配内存但仍然没有被释放的对象或内存块的数量

Total Bytes:使用过的内存

Total:全部的内存数,不管是使用还是没有使用的都算


如果写的有什么问题,真心接受各位的指点。。。。。。。


请点赞,谢谢~~~偷笑

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值