一、说明
Time Profiler
帮助我们分析代码的执行时间,找出导致程序变慢的原因,告诉我们“时间都去哪儿了?”
原始性能分析方法:写个单元测试
NSDate *startDate = [NSDate date];
for (int i = 0; i < 100000; i++) {
NSString *string = @"123";
string = [string stringByAppendingString:@"abc"];
NSLog(@"%@", string);
}
NSDate *endDate = [NSDate date];
NSTimeInterval interval = [endDate timeIntervalSinceDate:startDate];
NSLog(@"time = %f",interval);
这种方法的缺点有以下几点:
- 1、测试效率太低,很多性能瓶颈是很难预估到的,需要从上层到下层进行逐步排除;
- 2、无法对界面渲染的效率进行测试,找出界面性能瓶颈;
- 3、NSLog的分析不够精确,可能在模拟器上由于开发设备性能速度快,无法明显区分出性能瓶颈。
二、打开Instruments Time Profiler
尽量使用真机
调试,并且使用release
配置,这样比较准确点。
双击耗时比较多的函数调用
及时释放占用内存大的临时变量,减少内存占用峰值。
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"首页";
NSDate *startDate = [NSDate date];
for (int i = 0; i < 100000; i++) {
@autoreleasepool {
NSString *string = @"123";
string = [string stringByAppendingString:@"abc"];
// NSLog(@"%@", string);
}
}
NSDate *endDate = [NSDate date];
NSTimeInterval interval = [endDate timeIntervalSinceDate:startDate];
NSLog(@"time = %f",interval);
}
注释掉打印,重新跑一遍工程,很明显流程多了