jib*_*bay 5 arrays cocoa objective-c predicates objective-c-blocks
性能方面,在一个相对较大的阵列上(到目前为止,原始阵列的通常计数是±20000),哪种方法最适合过滤它?块或谓词?
包含对象的大多数ivars都是字符串,我想查询它们.
块有一种方法可以更快:
NSEnumerationConcurrent用来枚举数组.但是,文档没有明确说明在并发枚举时将保留顺序.我认为这不是一个好赌注.如果数组的顺序很重要,你必须重新排序(如果可能的话),你必须在任何时序比较中包含它.
其他方法是使用块非并发枚举并使用谓词进行过滤.filterUsingPredicate:可能会更快,因为NSArray将有机会使用内部知识来构建结果数组,而不是重复的addObject:消息.但那只是一种可能性; 确切知道的唯一方法是进行比较,即使这样,答案也可能随时发生变化(包括在同一过程中,对于不同的输入数组或数组中的不同对象).
我的建议是首先使用谓词直接实现它,然后使用Instruments来查看它是否是性能问题.如果没有,清除代码获胜.如果是性能问题,请尝试并发枚举.