instruments(03)之Leak(内存泄漏)
2016-06-07 本文已影响677人
dogs_five
此文章主要是分析程序出现的内存泄漏问题,是基于上一篇博客instruments(02)之Allocations
附上地址http://www.jianshu.com/p/4f1f3c80186e
首先需要注意以下几件事:leak并不是万能的,也就是说有些内存泄漏问题根本查找不出来,而典型的代表就是UI中的控件。如果leak查找不到内存泄漏并不能代表没有内存泄漏,但是如果查找到了内存泄漏,说明程序肯定有内存泄漏。
如果出现了leak查找不到的内存问题,这时候我们就需要结合Allocations来查找。
接下来新建一个工程,将开发环境设置为MRC。代码如下:
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self loadLab];
[self loadImage];
[self loadData];
}
- (void)loadLab{
UILabel *lab = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
[self.view addSubview:lab];
}
- (void)loadImage{
NSString *s = [[NSBundle mainBundle]pathForResource:@"1.png" ofType:nil];
UIImage *image = [[UIImage alloc]initWithContentsOfFile:s];
NSLog(@"%@",image);
}
- (void)loadData{
NSArray *arr = [[NSArray alloc]initWithObjects:@"123",@"34",nil];
NSLog(@"%@",arr);
}
command + i进入如下界面:
内存泄漏图.png
虽然上图中的lab也没有release,但是却没有提示内存泄漏,对UI中的控件,通过leak并不能寻找到内存泄漏问题。因此养成一个良好的编程习惯显得尤为重要。
那么一旦是控件出现的内存问题,我们怎么查找呢?