面试总结 | Xcode及工具使用

一,全局断点。

Symbol中添加的是进入断点的条件,这里添加两次,分别输入:
-[NSException raise]
objc_exception_throw
如图:

分别表示在全局代码中获取异常后会进入断点,例如在主线程中,因为数据的下标问题,抛出一个异常,此异常再ViewController 下的viewDidLoad方法中:

二,异常断点。

添加异常断点,然后会在全局代码有异常的时候进入断点,可以更快速的发现系统崩溃原因。

运行程序后会直接进入异常代码块,然后可进行排查:

三,查看函数耗时情况,这里是查看App启动花费的时间。

TimeProfiler查看耗时:
直接打开Xcode,找到Product->Scheme->Edit Scheme->Run->Arguments->Environment Variables->DYLD_PRINT_STATISTICS 设置为 YES。

然后运行程序则会在控制台输出App启动所花费的时间:

Total pre-main time:  89.84 milliseconds (100.0%)
         dylib loading time: 140.32 milliseconds (156.1%)
        rebase/binding time: 126687488.8 seconds (346416737.9%)
            ObjC setup time:  16.38 milliseconds (18.2%)
           initializer time:  56.46 milliseconds (62.8%)
           slowest intializers :
             libSystem.B.dylib :   5.49 milliseconds (6.1%)
   libBacktraceRecording.dylib :   6.87 milliseconds (7.6%)
               libobjc.A.dylib :   2.20 milliseconds (2.4%)
    libMainThreadChecker.dylib :  34.86 milliseconds (38.8%)
        libLLVMContainer.dylib :   2.26 milliseconds (2.5%)

三,Xcode工具Instruments只时间分析工具,Time Profiler。
Time Profiler通过比较时间间隔之间的堆栈状态,来推算出某个方法执行了多久,给出一个近似值。操作如下:

1,打开Instruments,选择Time Profiler,然后点击左上角选择好运行环境及项目,然后点击开始:

可以清晰的看到每个方法执行了多长时间,在哪个线程下面,所占CPU等信息,然后根据当前信息进行优化。

2,点击某个方法可直接进入方法体:

3,可通过筛选去查看及寻找想要的结果,然后进行优化:

Separate by Thread:按线程分开做分析;
Invert Call Tree:反向输出调用树;
Hide Missing Symbols:隐藏缺失符号;
Hide System Libraries:隐藏系统库文件;
Flattern Recursion:拼合递归;
Top Functions:找到最耗时的函数或方法。

三,内存泄露之Leaks。

Leaks是查看当前项目哪部分代码块内存泄露的工具,具体操作如下。

打开Instruments工具,然后选择Leaks,然后:

选择Call trees,然后选择隐藏系统库和最大内存泄露展示的选项:

然后根据工具提示获取到代码块,点击进入详情的代码块,具体泄露了多少内存,在那一行都有展示。

个人习惯,一般昨晚项目之后,先对项目中的视图进行优化(UIView,UITableview等),然后检查启动优化,然后去删除项目中一些没用的文件资源,例如图片,html等,然后再去做内存,CPU,电池优化。
内存优化首先去Analyze下项目,看看大模块的内存泄露,然后用Leaks去优化。

Leave a Reply

Required fields are marked *