美文网首页性能优化iOS程序员
instruments(02)之Allocations(内存分配

instruments(02)之Allocations(内存分配

作者: dogs_five | 来源:发表于2016-06-06 15:33 被阅读785次

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

    具体实例:

    相关文章

      网友评论

      本文标题:instruments(02)之Allocations(内存分配

      本文链接:https://www.haomeiwen.com/subject/jfzrdttx.html