我正在为Objectice-C开发iphone的2D游戏。在这个项目中我需要使用堆栈,我可以使用STL(标准模板库)堆栈或NSMutableArray来做,因为这个堆栈在游戏中被广泛使用在运行速度和内存使用方面更有效吗?
@interface CarElement : NSObject
{
std::stack<myElement*> *mBats;
}
或
@interface CarElement : NSObject
{
NSMutableArray *mBats;
}
谢谢,
答案 0 :(得分:7)
人们普遍认为Objective-C在大多数情况下比C ++慢。
Objective-C最大的优点是灵活性和重用。创建该灵活性的运行时链接会产生相当大的开销。
另一方面,在数组的情况下,开销通常是微不足道的。对于LIFO堆栈,您将看不到Objective-C和C ++之间的任何性能差异,因为代码不必扫描整个数组而只扫描第一个元素。除非您的阵列操作非常复杂并且阵列非常大,例如10K +对象,您可能不会看到任何显着的性能差异。
我的建议是使用您想在应用程序中操作的类型的虚拟数据进行测试运行。将数组加载到您期望的最大大小之后,循环大量操作,然后 测量 时间和内存使用。看看C ++的性能提升是否证明了额外的开发时间和复杂性税是否值得获得性能。
请记住, 过早优化是所有邪恶的根源 。不要花时间去预防你可能没有的问题。默认为最简单的解决方案,除非您有良好的 证据 以怀疑它可能不够。
答案 1 :(得分:4)
我会使用NSMutableArray,不是因为它更快(可能不会),而是因为它在Objective-C的上下文中更容易。如果你使用std :: stack,你将不得不添加内容来进行内存管理。
然后我会分析代码以找出堆栈是否是瓶颈。如果是的话,我可以考虑用std :: stack重新实现,甚至可以自己编译。