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

问题描述:

我在写一些实时音频处理代码,它将在音频单元的渲染回调中执行。iOS:调用Objective-C方法的处理开销是多少?

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

Apple指示最大限度地减少此次通话中处理的数量。他们的建议之一是避免Objective-C方法的调用。

但是为什么?

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

+2

这已经在其他堆栈溢出问题中讨论过。我相信最详细的解释是在@ bbum的博客上:http://www.friday.com/bbum/2009/12/18/objc_msgsend-part-1-the-road-map/ – 2011-04-18 08:05:39

+0

@Bavarious:你应该提供作为这篇博文的答案,可能*是对Objective-C方法调用的单一最佳分析。 – DarkDust 2011-04-18 08:08:59

+0

这个链接让我感到惊讶,10分钟前我以为我是一名专业的软件开发人员,现在我感觉自己是一个总共n00b,thx的那个Bav:p – 2011-04-18 08:43:56

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

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

Mike Ash给出了一个great writeup关于Objective-C消息传递的情况,如果您对其他细节感兴趣的话。

+0

感谢您的明确答案和超级链接!完善! – 2011-04-18 08:41:45