objective-c – NSArray过滤:在哪种情况下使用谓词和使用块的情况?

objective-c – NSArray过滤:在哪种情况下使用谓词和使用块的情况?,第1张

概述性能方面,在一个相对较大的阵列上(到目前为止,原始阵列的通常计数是±20000),哪种方法最适合过滤它?块或谓词? 包含对象的大多数ivars都是字符串,我想查询它们. 块有一种方法可以更快: >您使用NSEnumerationConcurrent枚举数组. >当您找到符合条件的对象时,将另一个块分派给将对象添加到结果数组的串行队列. (您不能同时执行此 *** 作,因为NSMutableArrays不是 @H_419_4@ 性能方面,在一个相对较大的阵列上(到目前为止,原始阵列的通常计数是±20000),哪种方法最适合过滤它?块或谓词?

包含对象的大多数ivars都是字符串,我想查询它们.

@H_419_4@解决方法 块有一种方法可以更快:

>您使用NSEnumerationConcurrent枚举数组.
>当您找到符合条件的对象时,将另一个块分派给将对象添加到结果数组的串行队列. (您不能同时执行此 *** 作,因为NSMutableArrays不是线程安全的.)

但是,文档没有明确说明在并发枚举时将保留顺序.我认为这不是一个好赌注.如果数组的顺序很重要,你必须重新排序(如果可能的话),你必须在任何时序比较中包含它.

其他方法是使用块非并发枚举并使用谓词进行过滤. filterUsingPredicate:可能更快,因为NSArray将有机会使用内部知识比重复的addobject:消息更快地构建结果数组.但那只是一种可能性;确切知道的唯一方法是进行比较,即使这样,答案也可能随时发生变化(包括在同一过程中,对于不同的输入数组或数组中的不同对象).

我的建议是首先使用谓词直接实现它,然后使用Instruments来查看它是否是性能问题.如果没有,清除代码获胜.如果是性能问题,请尝试并发枚举.

@H_419_4@ @H_419_4@ @H_419_4@ @H_419_4@ 总结

以上是内存溢出为你收集整理的objective-c – NSArray过滤:在哪种情况下使用谓词和使用块的情况?全部内容,希望文章能够帮你解决objective-c – NSArray过滤:在哪种情况下使用谓词和使用块的情况?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1006002.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存