NSFetchedResultsController Cache

时间:2015-06-22 05:33:53

标签: ios nsfetchedresultscontroller

我想知道缓存FetchedResultsController的重要性。假设我有一个包含50个项目的表格视图,在任何给定的时间点,表格视图可以显示大约10个结果。当我向上和向下滚动表视图时,FetchedResultsController是否隐式提取并缓存结果?如果我没有缓存或指定缓存,FetchedResultsController会不必要地再次进行提取。简而言之,我想知道FetchedResultsController的缓存功能。

2 个答案:

答案 0 :(得分:1)

缓存的主要原因是应用程序重新启动的速度更快,因为它不需要重新获取上次运行该应用程序时已经执行的记录。结果而是存储在表结构中已经存在的文件中,因此与加载所有行,将它们分组等所需的多个查询相比,它们可以立即加载。同样很酷的是,如果另一个进程或扩展编辑了数据库,然后当应用首次出现时,它将与默认图像(应用最后关闭时拍摄的屏幕截图)相匹配,并且将对应用未运行时发生的表的变化进行动画处理。这对于用户理解上下文非常有用。

如果您进入视图控制器,然后再返回,然后再次进入,您也可以使用它,这样可以更快地显示表格。

答案 1 :(得分:0)

指定缓存名称时会发生以下情况:

  • 如果控制器找不到合适的缓存,则会计算出 必需部分和部分内对象的顺序。然后呢 将此信息写入磁盘。
  • 如果找到具有相同名称的缓存,则控制器会测试 缓存以确定其内容是否仍然有效。该 controller比较当前实体名称,实体版本哈希, 排序描述符,以及与存储在其中的那些关键字路径 缓存,以及缓存信息的修改日期 文件和持久存储文件。
  • 如果缓存与当前信息一致,则 controller重用以前计算的信息。
  • 如果缓存与当前信息不一致,那么 重新计算所需信息,并更新缓存。

每当更改部分和订购信息时,都会更新缓存。

特别是缓存用于存储与section和indexpath相关的信息,这些信息可以快速加载数据。