是否需要缓存CoreData返回的数据?

Posted

技术标签:

【中文标题】是否需要缓存CoreData返回的数据?【英文标题】:Is it necessary to cache data returned from CoreData? 【发布时间】:2011-02-12 06:42:52 【问题描述】:

我使用 CoreData 将数据存储在 iPhone 应用程序中。存储的数据旨在表示一棵树,每条记录都是一个节点(带有指向其父节点的指针)。当用户浏览这棵树时,我将当前父节点和当前子节点集缓存在一个 NSArray 中。我最初认为这是有道理的,因为它可以允许更快地访问兄弟节点(当数据显示在 UITableView 中并且用户滚动时很有用)。我觉得每次需要下一个孩子时使用 CoreData 执行“获取所有孩子”查询效率低下(即,我会为 n 个孩子进行 n 次相同的查询,每次只返回第 i 个结果)。

现在,我不太确定这是否必要也不明智(主要是因为我了解到 CoreData 是一个我尚未完全理解的野兽)。 有人知道这是否是好习惯吗?我知道 CoreData 做了很多免费的事情,包括结果的缓存,但是由于我知道我的数据将像一棵树一样被使用,我的实现(或其他一些外部的 CoreData 缓存实现)会更有效吗?

【问题讨论】:

【参考方案1】:

当您使用 coredata 和 UITableView 时,您应该使用 NSFetchedResultsController。它会为您完成所有缓存,并且肯定会比您做得更好。 fetchedResultsController 还负责删除、更改和插入 coredata 对象,即它告诉您何时更新 tableview。但要使后者发挥作用,您必须设置 fetchedresultscontroller 委托方法。 documentation 中包含委托函数的完整示例。

一般来说,不需要缓存。

【讨论】:

以上是关于是否需要缓存CoreData返回的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如果使用 CoreData,我需要缓存吗

需要从 Core Data 中读取 10,000 条记录

将数据与 Core Data 同步

如何调整 Core Data 默认缓存的行为或大小?

使用 Core Data 时是不是需要本地数组?

加密通过 Core Data 访问的 Sqlite 数据库