2011-02-07 41 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