[英]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.