Instruments — Time Profiler使用

Time Profiler

简介:时间分析工具,能帮助我们分析代码的执行时间,找出导致程序变慢的原因。

下面就用三个方法来进行相关测试:

//NSLog
-(void)printLogOC{
    //代码方式获取运行时间
    double dateStart = CFAbsoluteTimeGetCurrent();
    for (int i = 0; i<10000; i++) {
        NSLog(@"---->NSLOG:%d",i);
    }
    double dateEnd = CFAbsoluteTimeGetCurrent()-dateStart;
    NSLog(@"NSLog timeConsuming = %f",dateEnd);
}
//printf
-(void)printLogC{
    for (int i = 0; i<10000; i++) {
        printf("====>printf:%d",i);
    }
}
//子线程中forLoop
-(void)forLoop{
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        for (int i = 0; i<10000; i++) {
            NSLog(@"****>%d",i);
        }
    });
}

一、打开Instruments 再打开Time Profiler

启动Xcode -> Instruments


Instruments — Time Profiler使用_第1张图片
Time Profiler.png

这个就是Time Profiler的面板


Instruments — Time Profiler使用_第2张图片
Time Profiler面板简介.png

二、选择project ,点击开始运行按钮

运行完需优化的代码后,点击暂停。
运行完成后的结果展示:


Instruments — Time Profiler使用_第3张图片
Time Profiler收集数据完成面板.png

三、工具栏设置,方便快速定位问题

工具栏的显示设置


Instruments — Time Profiler使用_第4张图片
Time Profiler工具栏-显示设置.png
  1. Separate by State : 线程分离,状态分开显示 ,例如:Running状态,
  2. Separate by Thread : 线程分离, 每个线程分开显示,只有这样 才能在调用路径中能够清晰看到占用CPU耗时最大的线程.
  3. Invert Call Tree : 从上到下跟踪堆栈信息.这个选项可以快捷的看到方法调用路径最深方法占用CPU耗时,比如FunA{FunB{FunC}},勾选后堆栈以C->B->A把调用层级最深的C显示最外面.
  4. Hide System Libraries : 隐藏系统调用,只关注自己代码的耗时
  5. Flatten Recursion : 递归函数, 每个堆栈跟踪一个条目
  6. Top Functions : 显示某个函数的总时间,A函数内调用多个函数时,可以显示A函数的总耗时

四、查看详情,

设置完后,界面就不会再有那么多系统调用了,能清晰的定位到想关调用。

可以双击定位到代码。


Instruments — Time Profiler使用_第5张图片
Time Profiler数据详情.png

五、定位相关问题代码

Instruments — Time Profiler使用_第6张图片
Time Profiler定位到相关代码.png

好了,到这里就能发现一些问题了,再针对问题去优化。

开发中遇见过的问题:

在做通讯录的时候,要按姓排序分组,然后在通讯录展示的时候一直会卡,发现iOS默认方法取名字的首字母太耗时了。

//取大写字母
-(NSString *)firstCharactor:(NSString *)aString{
    NSMutableString *str = [NSMutableString stringWithString:aString];
    //先转换为带声调的拼音
    CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformMandarinLatin, NO);
    //再转换为不带声调的拼音
    CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformStripDiacritics, NO);
    //转化为大写拼音
    NSString *resultStr = [str capitalizedString];
    //获取并返回首字母
    return [resultStr substringToIndex:1];
}

优化方案:
添加pinyin.c,pinyin.m文件到项目中,利用里面的函数,瞬间感觉起飞
点击下载文件

你可能感兴趣的:(Instruments — Time Profiler使用)