速度:iOS 使用 NSPredicate filterUsingPredicate 与 for 循环

Posted

技术标签:

【中文标题】速度:iOS 使用 NSPredicate filterUsingPredicate 与 for 循环【英文标题】:Speed: iOS Using NSPredicate filterUsingPredicate vs. for loop 【发布时间】:2013-07-26 17:56:00 【问题描述】:

我需要过滤自定义对象的 NSMutableArray,并且想知道以下一项在速度/运行时间方面是否比另一项更好,或者它们是否几乎相同:

(1) 使用[array filterUsingPredicate:predicate],

(2) 使用for循环遍历所有元素并检查它们是否满足条件。

我之所以这么问,是因为我认为每个对象必须满足的标准可能会有所不同,因此制作谓词可能会很棘手。

提前致谢!

【问题讨论】:

谓词是什么?数据是什么? 为什么不同时尝试并衡量性能? 如果您测量并分析了您的代码并得出您的代码是一个瓶颈的结论,那么这两种选择都可能无法解决性能问题。两种方法都会很慢——否则,两者都足够快。如果你有性能问题,你不应该使用 Cocoa 容器或 NSObjects——或者你应该努力寻找一种不同的算法来更快地解决问题。 【参考方案1】:

我不相信这两种技术在一般情况下会更快。这两种技术都对循环或谓词的编写方式以及数据的外观很敏感。如果数组根据您的过滤条件未排序,则它们都只需要逐步遍历所有元素。

使用可以为您留下更清晰和更易于维护的代码的方法,然后如果您发现存在实际性能瓶颈,请考虑尝试并将其与另一种方法进行比较。

【讨论】:

以上是关于速度:iOS 使用 NSPredicate filterUsingPredicate 与 for 循环的主要内容,如果未能解决你的问题,请参考以下文章

iOS谓词NSPredicate的简单使用

嵌套对象 IOS 的 NSPredicate 问题

ios:使用 NSPredicate 检查正则表达式 - 无法解析格式字符串

如何在 iOS 的核心数据中创建和使用带有查询的 NSPredicate?

IOS / Objective-C:核心数据NSPredicate使用IN不返回所有匹配

NSPredicate 不适用于 ios 中的过滤