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

4
我正在编写一些实时音频处理代码,这些代码将在音频单元的呈现回调中执行。
该线程是系统认可的最高优先级级别。
苹果公司建议尽量减少在此调用中进行的处理。其中一个建议是避免 Objective-C 方法调用。
但是为什么要这样做?
当调用 Objective-C 方法时会发生什么?实际的开销是多少?

2
这个问题已经在其他Stack Overflow的问题中讨论过了。我认为最详细的解释可以在@bbum的博客上找到:http://www.friday.com/bbum/2009/12/18/objc_msgsend-part-1-the-road-map/ - user557219
@Bavarious:你应该把这个作为答案提供,因为这篇博客文章很可能是对Objective-C方法调用最好的分析。 - DarkDust
那个链接吓坏了我,10分钟前我还以为自己是一名专业的软件开发人员,现在感觉像个彻头彻尾的新手,谢谢你,Bav :p - P i
1个回答

8

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

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

如果您对Objective-C消息传递发生的情况感兴趣,Mike Ash在这里提供了很好的说明。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接