性能方面,在相对较大的数组上(到目前为止,原始数组的通常计数为 ±20000),哪种方法最适合过滤它?块还是谓词?
包含的对象的大多数 ivars 都是字符串,我想查询这些。
性能方面,在相对较大的数组上(到目前为止,原始数组的通常计数为 ±20000),哪种方法最适合过滤它?块还是谓词?
包含的对象的大多数 ivars 都是字符串,我想查询这些。
有一种方法可以更快地阻止块:
NSEnumerationConcurrent
用来枚举数组。但是,文档没有明确说明在同时枚举时将保留顺序。我认为它不会是一个很好的选择。如果数组的顺序很重要,则必须重新排序(如果可能的话),并且必须将其包含在任何时序比较中。
其他方法是使用块进行非并发枚举并使用谓词进行过滤。filterUsingPredicate:
可能会更快,因为 NSArray 将有机会使用内部知识来比重复addObject:
消息更快地构建结果数组。但这只是一种可能性。唯一确定的方法是进行比较,即使那样,答案也可能随时改变(包括在同一过程中,对于不同的输入数组或数组中的不同对象)。
我的建议是首先直接使用谓词来实现它,然后使用 Instruments 来查看它是否是性能问题。如果不是,则清晰的代码获胜。如果是性能问题,请尝试并发枚举。
在谈论性能时,很难击败实验。我们可能会就块的各种性能影响或使用的任何解决方案争论一整天,但最好是根据应用程序中使用的实际数据进行测量。