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

P i*_*P i 4 methods objective-c overhead invocation ios

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

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

Apple指示最小化此调用中正在进行的处理量.他们的一个建议是避免使用Objective-C方法调用.

但为什么?

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

ext*_*dom 8

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

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

如果您对其他细节感兴趣,Mike Ash 会对Objective-C消息传递的内容做出精彩的介绍.