我正在研究一個應用程序,我有一個存儲20個左右精靈的NSMutableArray。我需要相當快速和高效地遍歷它。我的目的速度並不是最優的......我在迭代時從每個精靈中獲得兩個值,它是否更有效(更快)地遍歷CGPoints數組,然後是一組精靈?或者,爲了僅處理兩個整數值的唯一目的,而不是CGPoint創建一個自定義類。無論哪種方式,速度都受存儲在數組中的對象類型或值的影響?Objective-C數組迭代速度
回答
我不認爲你應該擔心只有20個項目的迭代速度。
同意。不要爲此感到擔心,除非n可能是任意大的,如果你正在迭代一個LOT,或者它有一天會比20大得多。如果肯定會達到20,那麼尋找其他地方來指導你的優化努力。 – 2009-12-04 22:17:00
看到我通常不會正常工作,但我正在開發一款遊戲,而這種迭代遍歷數組的方法每秒鐘會被調用大約2次。所以速度變化正在被遊戲的響應時間所吸收,這並不是很明顯,但仍有一些可能會被它所困擾。我做了一個CG數組的C數組,並注意到一個改進...雖然感謝您的幫助。 – BTN 2009-12-04 22:38:21
迭代的速度不受存儲在數組中的數據類型的影響。它是受您使用的數組類型影響:在遍歷Objective-C NSArray
(或其任何子類,如NSMutableArray
),C風格數組或C++ std::vector
之間存在顯着差異。
如果您使用的是NSArray
,並且您正在使用Objective-C 2.0(例如,在iPhone或Mac OS X 10.5或更高版本中),則可以使用fast enumeration進行迭代,這比舊版本快得多迭代的風格:
// Fast enumeration
for(id object in myNSArray)
; // do stuff with object
// Slow enumeration
int count = [myNSArray count], i;
for(i = 0; i < count; i++)
{
id object = [myNSArray objectAtIndex:i];
// do stuff with object
}
我不知道枚舉的速度有多快與C風格的數組或C++ std::vector
小號比較,但我敢打賭,它仍然是一個稍微慢一點。速度較慢,因爲你有額外的Objective-C開銷:傳遞消息(例如count
和objectAtIndex:
)通過Objective-C運行時,即使在最好的情況下,它也比裸指針運算慢。
遍歷通過C風格的數組或C++ std::vector
是非常快的,因爲編譯器能夠優化他們真的沒有開銷簡單的指針算術指令:
// C-style array
SomeType *myArray = ...; // e.g. malloc(myArraySize * sizeof(SomeType))
int i;
for(i = 0; i < myArraySize; i++)
; // do stuff with myArray[i]
// C++ vector
std::vector<SomeType> myArray = ...;
for(std::vector<SomeType>::iterator i = myArray.begin(); i != myArray.end(); ++i)
; // do stuff with *i
- 1. 字典迭代速度
- 2. 爲什麼迭代通過一個數組的速度比Seq.find
- 3. 迭代數組
- 4. 迭代速度和元件大小
- 5. Java迭代哈希表vs ArrayList速度
- 6. python是否以恆定速度迭代?
- 7. VBA迭代VS SQL速度在Access
- 8. NodeJS對象數組的迭代迭代
- 9. 迭代數組Android
- 10. JSON數組迭代
- 11. msbuild數組迭代
- 12. 迭代和數組
- 13. 迭代SKShapeNodes數組
- 14. 迭代數組javascript
- 15. 迭代PHP數組
- 16. 迭代int數組
- 17. 在數千個文件中迭代速度更快
- 18. 爲什麼Spark的第一次迭代速度很慢並且迭代更快?
- 19. 熊貓數據框組中的快速迭代更改
- 20. Cython可以加速對象迭代的數組嗎?
- 21. 在多維numpy數組上迭代的快速條件檢查
- 22. 如何用numpy快速迭代並修改像素數組?
- 23. 在布爾數組中迭代trues的快速方法
- 24. 迭代散列數組
- 25. SQL迭代通過數組
- 26. Chefspec不能迭代數組
- 27. 迭代multidim位置數組
- 28. 迭代視頻數組iOS
- 29. zapier查找迭代數組
- 30. PHP:迭代對象數組
第一個人資料,看看那裏的性能問題,然後優化熱點。 – 2009-12-05 02:18:07