2011-02-07 93 views

回答

5

有一個辦法,阻止可能會更快:

  1. 您使用NSEnumerationConcurrent枚舉陣列。
  2. 當您找到與您的條件匹配的對象時,將另一個塊分派給將該對象添加到結果數組的串行隊列。同時枚舉時(你不能因爲NSMutableArrays不是線程安全的這樣做同時進行。)

然而,文檔沒有明確說,爲了將被保留。我認爲這是不錯的選擇。如果數組的順序很重要,則必須重新排序(如果甚至可能的話),並且在任何時間比較中都必須包含該順序。

其他方法是非同時枚舉使用塊和篩選使用謂詞。 filterUsingPredicate:可能會更快,因爲NSArray將有機會使用內部知識來構建結果數組,比重複的消息更快。但這只是一種可能性;唯一可以肯定知道的方法是比較,即使如此,答案可能會隨時發生變化(包括在同一過程中,對於不同的輸入數組或不同的對象)。

我的建議是直接使用謂詞實現它 - 首先使用謂詞,然後使用Instruments來查看它是否是性能問題。如果不是,則清除代碼獲勝。如果這是性能問題,請嘗試併發枚舉。

+0

謝謝,你正在寫...而且代碼少維護=少痛:) – jibay 2011-02-07 16:52:15

3

在談論性能時很難打敗一個實驗。我們可以爭論一整天關於塊或所用解決方案的各種性能影響,但最好是當您測量應用程序中使用的實際數據時。

+0

謝謝,我實現了這兩個,我會看到它的行爲取決於查詢的複雜性。現在和一個簡單的查詢,我會看到它隨着時間的推移如何演變。 – jibay 2011-02-07 16:51:36