此篇文章对allocations
使用进行详细介绍,主要是为接下来要讲的内存泄漏(leak)做铺垫。关于instruments
的一些基本功能介绍建议先看http://www.jianshu.com/p/7aa4884baa57
接下来进入主题,首先新建一个工程,代码如下
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,strong)UILabel *lab;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self loadLab];
[self load];
}
- (void)loadLab{
self.lab = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
self.lab.text = @"123";
self.lab.backgroundColor = [UIColor redColor];
[self.view addSubview:self.lab];
}
- (void)load{
UIImage *image = [UIImage imageNamed:@"1"];
NSArray *arr =[[NSArray alloc]initWithObjects:image, nil];
NSLog(@"%@",arr);
}
按住 command + i 进入instruments
界面点击Allocations
如图:
调试界面
Allocations.png
1:堆区内存和虚拟内存占用图
2:堆区内存占用图
3:虚拟内存跟踪图
4:选择使用不同的形式展示内存占用情况
5:勾选让上面曲线图展示对应内存占用情况
6:持久分配的内存所占字节数(未释放)
7:持久创建的对象个数(未释放)
8:临时分配的对象个数(未释放)
9:分配的所有内存所占字节数(未释放)
10:创建的对象总数(未释放)
11:设置面板,不同的设置使左边有不同展示效果(下面讲解)
上面对面板的基本选项做了介绍,没有介绍到的在instruments(01)
有介绍
如上图并不能很好的了解每个方法所占用的内存情况,接下来我们点击4的call Trees如下图设置:
从上图我们可以看-load方法和-loadLab方法所占的内存情况,如果还不清晰,可以点击对应的方法,如下图所示
代码所占内存图.png
接下来我们根据内存泄漏的情况对内存分配进行分析,内存泄漏分两种:
第一种:为对象A申请了内存空间,之后再也没用到A,也没有释放A导致内存泄漏,这种情况等宝宝写instruments之leak
的时候讲解。
第二种:类似于递归,不断的申请内存导致的内存泄漏。
第二种情况根据以下图的操作可以清晰的找到对应的问题代码,当然不一定是我们自己的代码,也有可能是系统框架的问题。
具体实例:
网友评论