首先,dSYM是什么鬼?
程序编译后都会生成一个 dSYM 文件。
程序在执行中通过地址来调用方法函数。而 dSYM 文件里存储了函数地址映射,这样调用栈里的地址可以通过 dSYM 这个映射表能够获得具体函数的位置。一般都会用来处理 crash 时获取到的调用栈 .crash 文件将其符号化。
其次,说到Time Profiler。(要用release版本来profile)
时间分析工具,用来检测应用CPU的使用情况,可以看到应用程序各个方法消耗的CPU时间。
官方文档:https://help.apple.com/instruments/mac/current/#/dev03a7149d
-
time profile 是使用采样的方法来统计,而不是记录每一个方法调用的起始和结束,采样间隔是 1 ms。
上图中,main函数被采样 5 次, method3 没有被采样,但是确实执行了。
不能区分长时间运行的任务和重复执行的任务。
关注点是 CPU,而且不会记录所有操作。比如 method3 没有被采样。 -
查看time profiler结果
-
weight 调用自身和子类花费的时间及占总时间的百分比
不是实际耗费时间,而是该方法被采样的次数乘以采样间隔; -
self weight 自身花费的时间
该函数没有调用其他函数时,被采样的次数乘以采样间隔; - 如果weight = self weight,则说明该函数没有调用其它函数;
- Symbol name 被调用的函数名