【问题标题】:NSFetchedResultsController CacheNSFetchedResultsController 缓存
【发布时间】:2015-06-22 05:33:52
【问题描述】:

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

【问题讨论】:

    标签: ios nsfetchedresultscontroller


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这些是您指定缓存名称时发生的事情:

      • 如果控制器找不到合适的缓存,它会计算 所需的部分和部分内对象的顺序。那么它 将此信息写入磁盘。
      • 如果找到同名的缓存,控制器将测试 缓存以确定其内容是否仍然有效。这 控制器比较当前实体名称,实体版本哈希, 排序描述符,并将部分 key-path 与存储在 缓存,以及缓存信息的修改日期 文件和持久存储文件。
      • 如果缓存与当前信息一致,则 控制器重复使用之前计算的信息。
      • 如果缓存与当前信息不一致,则 重新计算所需信息,并更新缓存。

      每当节和排序信息发生变化时,缓存都会更新。

      特别是缓存用于存储与section和indexpath相关的信息,使数据加载速度更快。

      【讨论】:

      • 感谢您的回复。这是由 Apple 记录的。所以本质上,我们可以说拥有缓存是更好的选择吗?那么在没有缓存的情况下一遍又一遍地发生滚动呢?获取结果控制器是否每次都获取?
      猜你喜欢
      • 2011-10-06
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 2023-03-05
      相关资源
      最近更新 更多