【问题标题】:iOS: What is the processing overhead in invoking an Objective-C method?iOS:调用 Objective-C 方法的处理开销是多少?
【发布时间】:2011-08-07 16:32:19
【问题描述】:

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

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

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

但是为什么呢?

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

【问题讨论】:

  • 这已经在其他 Stack Overflow 问题中讨论过了。我相信最详细的解释在@bbum 的博客上:friday.com/bbum/2009/12/18/objc_msgsend-part-1-the-road-map
  • @Bavarious:您应该提供这个答案,因为这篇博文可能对 Objective-C 方法调用的最佳分析。
  • 那个链接把我吓坏了,10 分钟前我还以为我是一名专业的软件开发人员,现在我觉得自己完全是个 n00b,感谢那个 Bav:p

标签: objective-c ios methods overhead invocation


【解决方案1】:

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

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

如果您有兴趣了解更多详细信息,Mike Ash 会提供great writeup 关于 Objective-C 消息传递发生的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多