簡體   English   中英

NSArray計數方法有多貴?

[英]How expensive is the NSArray count method?

我處於一種情況,我需要獲取數組中的項目,時間是敏感的。 我可以選擇使用單獨的變量來保存當前計數,或者只使用NSMutableArray的count方法。

例如: if (myArray.count == ... )if (myArrayCount == ...)

從數組的count方法計算項目的數量是多少?

正確的答案是,速度沒有區別,所以你希望我的孩子訪問數組的計數:)

獲取NSArraycount方法並不比獲取存儲此值的局部變量更昂貴。 它被調用時不計算。 它是在創建和存儲數組時計算的。

對於NSMutableArray ,唯一的區別是NSMutableArray修改數組內容時都會重新計算屬性。 最終結果仍然相同 - 當您調用count ,返回的數字是預先計算的。 它只是返回已存儲的預先計算的數字。

將計數存儲在變量中,特別是對於NSMutableArray實際上是一個更糟糕的選擇,因為數組的大小可能會改變,並且訪問此變量中的計數並不是更快。 它只會增加潛在不准確的風險。

向自己證明這是在調用count方法時不計算的預設值的最佳方法是創建兩個數組。 一個數組只有幾個元素。 另一個陣列有數萬個元素。 現在count返回需要多長時間。 無論數組的大小如何,您都會發現返回count的時間是相同的。

作為對上述每個人的修正,NSArray沒有計數屬性。 它有一個計數方法。 該方法本身要么物理地計算數組中的所有元素,要么是數組存儲的私有變量的getter。 除非你計划繼承NSArray並創建一個更高效的系統來計算動態和/或靜態數組......你不會比在NSArray上使用count方法獲得更好的性能。 事實上,你應該依靠Apple已經優化了這種方法的事實。 我的主要思考是,如果你正在進行異步調用並且你的重點是優化NSArray的數量,你怎么不知道你是在認真做錯了什么。 如果你在主線程上執行一些高性能的擊球方法......你應該考慮優化它。 使用NSArray的計數方法迭代和計算數組的性能不會影響您的性能到任何明顯的速率。

如果這對您來說真的是一個問題,您應該閱讀更多有關NSArrays和NSMutableArrays的性能的信息。 你可以從這里開始: 鏈接

如果您需要獲得項目** s **,那么獲得計數並不是時間關鍵。 您還需要查看快速枚舉,或使用帶調度塊的枚舉,尤其是並行執行。

編輯:

Asa是最正確的答案。 我誤解了這個問題。

Asa是對的,因為編譯器會自動優化它並自己使用最快的方法。


關於NSArray盡可能優化的游戲藝術是正確的。 但是,這僅適用於obj-c。

不要忘記你可以訪問c和c ++,這意味着你可以使用的矢量應該只是“稍微”一點,因為它不會使用obj-c消息傳遞。 但是,如果差異不明顯,我也不會感到驚訝。 c ++矢量基准測試: http//baptiste-wicht.com/posts/2012/12/cpp-benchmark-vector-list-deque.html

這是早熟優化的一個很好的例子( http://c2.com/cgi/wiki?PrematureOptimization )。 我建議你研究一下GCD或NSOperations( http://www.raywenderlich.com/19788/how-to-use-nsoperations-and-nsoperationqueues

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM