性能优化iOS程序员

instruments(02)之Allocations(内存分配

2016-06-06  本文已影响785人  dogs_five

此篇文章对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
如图:

instruments界面.png
调试界面
Allocations.png
1:堆区内存和虚拟内存占用图
2:堆区内存占用图
3:虚拟内存跟踪图
4:选择使用不同的形式展示内存占用情况
5:勾选让上面曲线图展示对应内存占用情况
6:持久分配的内存所占字节数(未释放)
7:持久创建的对象个数(未释放)
8:临时分配的对象个数(未释放)
9:分配的所有内存所占字节数(未释放)
10:创建的对象总数(未释放)
11:设置面板,不同的设置使左边有不同展示效果(下面讲解)

上面对面板的基本选项做了介绍,没有介绍到的在instruments(01)有介绍
如上图并不能很好的了解每个方法所占用的内存情况,接下来我们点击4的call Trees如下图设置:

call Tree.png
从上图我们可以看-load方法和-loadLab方法所占的内存情况,如果还不清晰,可以点击对应的方法,如下图所示
代码所占内存图.png

接下来我们根据内存泄漏的情况对内存分配进行分析,内存泄漏分两种:
第一种:为对象A申请了内存空间,之后再也没用到A,也没有释放A导致内存泄漏,这种情况等宝宝写instruments之leak的时候讲解。
第二种:类似于递归,不断的申请内存导致的内存泄漏。
第二种情况根据以下图的操作可以清晰的找到对应的问题代码,当然不一定是我们自己的代码,也有可能是系统框架的问题。

内存问题查找图.png

具体实例:

上一篇下一篇

猜你喜欢

热点阅读