iOS-Instruments之Time Profiler

一、说明

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

FC53D744-0DD1-453B-BF16-D8360A3FD822.png
尽量使用真机调试,并且使用release配置,这样比较准确点。
2B8541D6-33B4-4A89-98F7-A77A0FDE3A90.png
双击耗时比较多的函数调用
1589596E-568A-4487-9109-37582FFEFA66.png

1296DE49-A955-49A3-9127-45CD22F87B46.png

及时释放占用内存大的临时变量,减少内存占用峰值。

- (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);
}

注释掉打印,重新跑一遍工程,很明显流程多了


A25F291B-1092-4FA8-9388-6BC2B1858792.png

参考

instrument Time Profiler总结

iOS检测内存泄漏的方法

你可能感兴趣的:(iOS-Instruments之Time Profiler)