缓存executeFetchRequest的结果

时间:2012-08-18 05:08:24

标签: ios core-data

我的视图控制器中有一个方法'books',它可以获取核心数据中的所有书籍并返回它们的数组。我经常依赖自己的书 - 当我需要知道它在某个索引上的书,有多少本书等时,书籍方法会重新获取结果。

通过在iVar中缓存这些结果,我可以获得任何性能提升吗?绝大多数时候我都知道self.books的结果不会改变(objectAtIndex,count等)。我可以添加第二个布尔值iVar'booksNeedRefresh'作为脏标志,并且只有在我添加/删除书籍时才将其设置为true。然后self.books可以检查此标志,并在必要时重新获取。

我想我的问题是:

  1. 来自核心数据的每个获取请求是否会引入不可忽视的性能损失?
  2. 缓存+脏标志是一个明智的解决方案吗?

1 个答案:

答案 0 :(得分:2)

我认为你走错了路。核心数据已经为您提供了大量的内存管理,因此不需要"脏"旗帜等。

最明显的解决方案是使用NSFetchedResultsController。它的主要目的是在保持内存占用小的同时在表格视图中显示数据 - 但它也可以用于其他目的。您的books数组将变为_fetchedResultsController.fetchedObjects,FRC将负责内存和提取之间的优化。

原则上回答你的问题,上面的权衡就是问题所在,所以你在思考这个问题时是正确的。频繁提取确实会影响性能。