此篇文章對allocations
使用進(jìn)行詳細(xì)介紹,主要是為接下來要講的內(nèi)存泄漏(leak)做鋪墊距境。關(guān)于instruments
的一些基本功能介紹建議先看http://www.reibang.com/p/7aa4884baa57
接下來進(jìn)入主題央拖,首先新建一個(gè)工程胰柑,代碼如下
#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 進(jìn)入instruments
界面點(diǎn)擊Allocations
如圖:
調(diào)試界面
1:堆區(qū)內(nèi)存和虛擬內(nèi)存占用圖
2:堆區(qū)內(nèi)存占用圖
3:虛擬內(nèi)存跟蹤圖
4:選擇使用不同的形式展示內(nèi)存占用情況
5:勾選讓上面曲線圖展示對應(yīng)內(nèi)存占用情況
6:持久分配的內(nèi)存所占字節(jié)數(shù)(未釋放)
7:持久創(chuàng)建的對象個(gè)數(shù)(未釋放)
8:臨時(shí)分配的對象個(gè)數(shù)(未釋放)
9:分配的所有內(nèi)存所占字節(jié)數(shù)(未釋放)
10:創(chuàng)建的對象總數(shù)(未釋放)
11:設(shè)置面板,不同的設(shè)置使左邊有不同展示效果(下面講解)
上面對面板的基本選項(xiàng)做了介紹爬泥,沒有介紹到的在instruments(01)
有介紹
如上圖并不能很好的了解每個(gè)方法所占用的內(nèi)存情況柬讨,接下來我們點(diǎn)擊4的call Trees如下圖設(shè)置:
從上圖我們可以看-load方法和-loadLab方法所占的內(nèi)存情況,如果還不清晰袍啡,可以點(diǎn)擊對應(yīng)的方法踩官,如下圖所示
接下來我們根據(jù)內(nèi)存泄漏的情況對內(nèi)存分配進(jìn)行分析,內(nèi)存泄漏分兩種:
第一種:為對象A申請了內(nèi)存空間境输,之后再也沒用到A蔗牡,也沒有釋放A導(dǎo)致內(nèi)存泄漏颖系,這種情況等寶寶寫instruments之leak
的時(shí)候講解。
第二種:類似于遞歸辩越,不斷的申請內(nèi)存導(dǎo)致的內(nèi)存泄漏嘁扼。
第二種情況根據(jù)以下圖的操作可以清晰的找到對應(yīng)的問題代碼,當(dāng)然不一定是我們自己的代碼黔攒,也有可能是系統(tǒng)框架的問題趁啸。
具體實(shí)例: