在使用 Xcode Instruments 中的 Time Profiler 分析我的iOS应用程序并选择 Top Functions 选项时,objc_msgSend
功能为完全归因于处理成本的三分之一:
此外,在 Top Functions 打开或关闭的情况下,如果我隧道进入任何消息发送 Time Profiler 显示成本很高,那么在每个级别,我都会看到{{ 1}}在每个级别占用大部分时间:
随着隧道向下挖掘的效果是将每个级别的成本削减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
委派给谁的问题。