首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阵列过滤器与核心数据提取性能的比较

阵列过滤器与核心数据提取性能的比较
EN

Stack Overflow用户
提问于 2013-11-29 01:24:51
回答 2查看 1.2K关注 0票数 9

我想知道两种不同的数据过滤方法之间的性能差异。下面是我的工作:

  • 一组核心数据对象
  • 表示布尔过滤器的UISegmentedControl (已学习的和未学习的)
  • 显示过滤数据集的UITableView。

在我看来,这里有两种可能的方法:

  1. 在viewDidLoad中提取整个核心数据集。当分段控制值发生变化时,使用谓词筛选数据数组。重新加载表视图。
  2. 最初使用谓词提取核心数据集。当分段控制值发生变化时,使用更新的谓词重新提取核心数据集.重新加载表视图。

我知道有一些因素会影响答案(数据集有多大,使用分段控制的频率有多高),我只是想知道两者之间是否有一个整体的最佳实践。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-29 22:21:22

我不期望会有任何用户-明显的速度差异。

因此,我认为这些是最佳实践,在这里是相关的:

  1. 避免过早优化。
  2. 你比速度更容易被记忆所束缚。
  3. 提前设计。

由此,我推导出适用于当前问题的三点建议

  1. 使用最容易维护的方法。
  2. 不要从核心数据中提取比必要更多的对象。
  3. 有一些更新表视图中数据的策略。

要将这些要点合并到一个建议中,最好使用类 NSFetchedResultsController在表中显示核心数据,因为它是为此目的专门设计的:

  1. 封装了“我当前显示的数据块”的概念。
  2. 通过不拉不需要的东西来节省你的记忆。
  3. 帮助更新表视图中的数据。

您可以通过在Xcode中创建一个新的基于数据的项目(4.4或更高版本)来使用它的示例。离你的第二步更近了。

票数 3
EN

Stack Overflow用户

发布于 2013-11-29 22:13:17

这两种方法之间存在权衡,最好的选择取决于这些差异对你有多重要。没有一种办法是针对每一种情况的最佳做法。

在一个数组中预先加载所有内容可能有:

  • 较慢的启动时间(因为关闭了大量的提取)
  • 更高的内存使用(因为您获取的是所有东西,而不仅仅是一个子集)
  • 在筛选器选项之间切换时速度更快(因为您已经拥有了数据)

每次执行新的提取很可能有:

  • 较快启动时间
  • 较低的内存使用量(因为您只拥有整个集合的子集)
  • 在筛选器选项之间切换的速度较慢,至少一开始是这样(Core数据的内部行缓存将加快后续交换机的运行速度)。

这些因素的重要性取决于您的数据和应用程序。如果您拥有大量数据的,那么内存的使用可能是很重要的(获取实体类型的每个实例是一种简单的方法来消除您的内存使用)。速度的问题取决于你的应用程序同时在做什么,坦率地说,取决于这两个选项是否足够慢到导致明显的延迟。如果您的数据集很小,那么使用哪种方法可能不会有太大影响。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20277038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档