如何"隧道进入"时间分析器中的objc_msg发送?

时间:2014-12-13 14:45:01

标签: objective-c profiling instruments xcode-instruments

在使用 Xcode Instruments 中的 Time Profiler 分析我的iOS应用程序并选择 Top Functions 选项时,objc_msgSend功能为完全归因于处理成本的三分之一:

enter image description here

此外,在 Top Functions 打开或关闭的情况下,如果我隧道进入任何消息发送 Time Profiler 显示成本很高,那么在每个级别,我都会看到{{ 1}}在每个级别占用大部分时间:

enter image description here

随着隧道向下挖掘的效果是将每个级别的成本削减objc_msgSend到我自己的方法中几乎没有优化的地方!

现在,我从网上的各种解释中了解到objc_msgSend非常快,实际上,通过我自己测试发送消息的成本,似乎就是这种情况。

那么,这笔费用来自哪里?各个帖子都建议像#"隧道进入objc_msgSend以查看它的呼叫内容,但正如您从上面的图片中看到的那样,似乎无法在中执行此操作时间分析器

我错过了一些基本的东西吗?

如果objc_msgSend真的很快,有没有办法确定为什么 Time Profiler 将我的应用的性能成本归因于objc_msgSend,并弄清楚objc_msgSend正在调用什么,所以我可以优化自己的代码?

或者objc_msgSend真正占用了我应用程序中CPU的三分之一是否切合实际,除了重构努力限制发送期间发送的消息数量之外,没有什么可以做的。我的应用程序的执行(这将使其朝着不易维护且更脆弱的类C设计的方向移动。)

最后一件事。如果我选择反转调用树以尝试查看最多使用objc_msgSend的位置,它会显示调用树顶部附近的方法,这些方法没有意义,因为调用树中较远的方法必须更频繁地调用obj_msgSend。当然,除非obj_msgSend归因于它所调用的所有功能的成本。在这种情况下,我回到了obj_msgSend告诉我Time Profiler委派给谁的问题。

0 个答案:

没有答案
相关问题