iOS:调用Objective-C方法的处理开销是多less?

我正在编写一些实时的audio处理代码,它将在audio单元的渲染callback中执行。

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

苹果公司指示尽量减less此次通话中处理的数量。 他们的build议之一是避免Objective-C方法调用

但为什么?

当一个Objective-C方法被调用时会发生什么? 实际开销是多less?

Objective-C方法的parsing是dynamic的。 在其他语言(如C或C ++)中,函数调用是在编译时设置的,本质上是跳转到包含该函数的地址。 然而,在Objective-C中,方法调用被实现为“发送消息”,这些消息不能以相同的方式工作。 有一个查询过程,而不是硬编码跳转。

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

如果您对更多细节感兴趣,Mike Ash就Objective-C消息传递的情况给予了很好的评论 。