4

我正在编写一些实时音频处理代码,这些代码将在音频单元的渲染回调中执行。

该线程处于系统识别的最高优先级。

Apple 指示尽量减少在此调用中进行的处理量。他们的建议之一是避免调用 Objective-C 方法。

但为什么?

调用 Objective-C 方法时会发生什么?实际开销是多少?

4

1 回答 1

8

Objective-C 方法解析是动态的。在 C 或 C++ 等其他语言中,函数调用是在编译时设置的,本质上是跳转到包含函数的地址。然而,在 Objective-C 中,方法调用被实现为“发送消息”,但其工作方式不同。涉及查找过程而不是硬编码跳转。

此查找过程作为与定位要运行的方法的地址相关的开销。它非常优化,但对于某些类型的代码,开销可能会导致性能问题。

如果您对更多细节感兴趣,Mike Ash 就 Objective-C 消息传递发生的事情给出了精彩的文章。

于 2011-04-18T08:11:33.727 回答