首页 文章

阵列过滤器与核心数据拉动性能

提问于
浏览
5

我想知道两种不同的数据过滤方法之间的性能差异 . 这是我正在使用的:

  • 一组核心数据对象

  • 表示布尔过滤器的UISegmentedControl(学习与未学习)

  • 显示已过滤数据集的UITableView

我认为,这里有两种可能的方法:

  • 在viewDidLoad中拉出整个核心数据集 . 当分段控制值发生变化时,使用谓词过滤数据数组 . 重新加载tableview .

  • 最初使用谓词拉取核心数据集 . 当分段控制值更改时,使用更新的谓词重新拉取核心数据集 . 重新加载tableview .

我知道有些因素会影响答案(数据集的大小,分段控件的使用频率),我只是想知道两者之间是否存在整体最佳实践 .

2 回答

  • 2

    我不认为会有任何用户明显的速度差异 .

    因此,我认为这些是相关的:

    • 避免过早优化 .

    • 你受记忆的限制比速度更快 .

    • 提前设计 .

    从此我推断适用于当前问题的 three points of advice

    • 使用最容易维护的方法 .

    • 不要从核心数据中提取超过必要的对象 .

    • 有一些关于更新tableview中数据的策略 .

    要在一个建议中组合这些点,它是 best to use the class NSFetchedResultsController 用于在表格中显示核心数据,因为它是专门为此目的而设计的:

    • 封装了"the chunk of data I'm currently displaying"的想法 .

    • 通过不拉你不需要的东西来节省你的记忆 .

    • 帮助更新tableview中的数据 .

    您可以通过在Xcode(4.4或更高版本)中创建基于Core Data的新项目来实现 play with examples of it . 它接近你的第二个方法 .

  • 2

    这两种方法之间存在权衡取舍,最佳选择取决于差异对您的重要程度 . 对于每种情况,没有一种方法是最佳做法 .

    在一个阵列中预先加载所有内容可能会:

    • 启动时间较慢(因为正在进行大量提取)

    • 更高的内存使用率(因为你提取所有内容而不仅仅是一个子集)

    • 在过滤器选项之间切换时更快(因为您已有数据)

    每次进行新的获取可能会:

    • 启动时间更快

    • 使用内存较少(因为您只拥有总集合的子集)

    • 在过滤器选项之间切换时速度较慢,至少在开始时(Core Data的内部行缓存会在后续开关上加快速度) .

    因素有多重要取决于您的数据和应用 . 如果你有 lots 的数据,那么内存使用可能很重要(获取实体类型的每个实例都是一种简单的方法来消耗你的内存使用) . 速度问题取决于你的应用程序在同一时间做了什么,坦率地说,这两个选项是否足够慢以引起明显的延迟 . 如果您的数据集很小,那么您使用哪种方法可能没什么区别 .

相关问题