Objective-C以简单的iPhone游戏性能改进

时间:2010-08-23 04:58:51

标签: objective-c c performance

我正在iPhone 3G和iPhone 4上测试基于2D OpenGL ES的iPhone游戏。它在iPhone 4上运行良好......在3G上运行良好。游戏状态以60 Hz更新......渲染以60 fps完成。以下从Objective-C到c的转换是否会改善性能?

// current Objective-C function
- (void) updateSomething {
    // simple update like x_position += 2.0;
}

// plain c function
void updateSomething(){
    // simple update like x_position += 2.0;
}

假设以60 Hz的速率调用这些函数。 我很好奇的原因是this博文。作者提到在进行类似转换时会有显着的性能提升。

干杯!

编辑:在XCode中运行带有CPU采样器的仪器后,看起来大约65%的函数调用是 mach_msg_trap objc_msgSend 显然占用了大量的资源。

1 个答案:

答案 0 :(得分:2)

答案是:这取决于,但可能不是。当你查看这些数字时,它会使方法调用看起来很昂贵(它们慢了两倍!)但是如果你在实际程序的上下文中查看它,真正的需要是函数调用和方法调用在大多数情况下基本上是免费的。

制作每秒60次调用的东西,每次调用减少100纳秒,这是处理器上与原始iPhone一样强大的无微观优化 - 每秒百万分之一秒的改进。在实际程序中,方法调用与函数的匹配将与方法的实际内容相比相形见绌。

要做的是分析您的应用程序并查看实际占用的时间。使用该信息来改进占用最多实际时间的算法。这就是你将如何得到真正的改善。很可能objc_msdSend本身不会在最大的罪犯附近。