【发布时间】:2011-04-20 23:43:04
【问题描述】:
我一直在尝试使用 Objective-C(特别是 GNU 运行时,我没有使用 GNUStep 或类似的东西)来用对象扩展 C。到目前为止它进展顺利 - 它运行良好,我真的很喜欢语法,但是从我一直在阅读的内容来看,使用 Objective-C 对象会降低性能。
我通常不会过早地进行优化,但我正在开发一款游戏,因此性能最终会变得相当关键 - 我想知道我自己在做什么!有几个人建议,只要我最里面的循环是用标准 C 编写的,我就可以在游戏中使用 Objective-C,但问题是找到我应该进行切换的点。
所以我的问题是双重的:
- 究竟什么会导致性能损失? (所以我知道我应该避免什么)
- 大致这种性能损失有多大? (所以我可以提前猜测我的游戏的哪些部分需要用 C 编写)
我的猜测是,在 Objective-C 对象上调用方法会招致惩罚,但我不确定还有什么——取消引用 Objective-C 对象会招致类似的惩罚吗?
int a = myobj->a;
使用try-catch-finally 怎么样 - 在没有抛出异常的情况下这会导致性能损失吗?
我意识到在某种程度上我可以使用基准测试自己解决大部分问题,但我对此相对较新,我希望更深入地了解 Objective-C 的工作原理以及任何性能损失的性质.
目前我对 C++ 不感兴趣,我只是在尝试使用 Objective-C。
【问题讨论】:
-
关于调用 Objective-C 方法的开销还有另一个 Stack Overflow 问题。该问题链接到两篇关于消息发送的好博文——一篇由 bbum 撰写,另一篇由 Mike Ash 撰写:iOS: What is the processing overhead in invoking an Objective-C method?。
-
Mike Ash 有另一篇文章比较了基于 IMP 的调用、C++ 虚方法调用、Objective-C 消息发送等操作的性能:Performance Comparisons of Common Operations, Leopard Edition。
标签: objective-c c performance