[英]NSMutableArray Vs Stack
我正在用Objectice-C开发iPhone的2D游戏。在这个项目中,我需要使用堆栈,我可以使用STL(标准模板库)堆栈或NSMutableArray来完成它,因为该堆栈在游戏中得到了广泛的使用,效率更高在运行速度和内存使用方面?
@interface CarElement : NSObject
{
std::stack<myElement*> *mBats;
}
要么
@interface CarElement : NSObject
{
NSMutableArray *mBats;
}
谢谢,
通常认为,Objective-C在大多数情况下比C ++慢。
Objective-C的最大优点是灵活性和重用性。 创建这种灵活性的运行时链接会带来相当大的开销。
另一方面,对于数组,该开销通常是微不足道的。 对于LIFO堆栈,您不会在Objective-C和C ++之间看到任何性能差异,因为代码不必扫描整个数组,而只需扫描第一个元素。 除非您的阵列操作非常复杂且阵列非常大(例如10K +个对象),否则您可能不会看到任何明显的性能差异。
我的建议是使用您想要在应用程序中操作的一些虚拟数据进行测试运行。 将阵列加载到超出您期望的最大大小,循环进行大量操作,然后测量时间和内存使用量。 看看C ++的性能提升是否足以证明额外的开发时间和复杂性税是否值得该性能提升。
还要记住, 过早的优化是万恶之源 。 不要花太多时间来避免可能根本没有的问题。 默认为最简单的解决方案,除非您有充分的证据怀疑它可能不够用。
我将使用NSMutableArray,不是因为它速度更快(可能不会),而是因为在Objective-C的上下文中它更容易。 如果使用std :: stack,则必须添加一些内容以进行内存管理。
然后,我将分析代码以了解堆栈是否是瓶颈。 如果是这样,我可能会考虑使用std :: stack重新实现,甚至自己滚动。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.