缓存核心数据存储在内存中

时间:2011-12-31 17:46:14

标签: cocoa caching core-data

我有一个CoreData存储包含两种类型的实体 - FooBar由SQLite存储支持。可以预期Foo具有相对较少的实例(~1000),所有实例都经常被访问和遍历。另一方面,Bar可以达到数百万,Bar的每个实例都很少被访问。

我的问题是,CoreData是否已默认优化此类非对称访问?如果没有,有没有办法告诉coreData始终在内存中缓存Foo的所有实例?

2 个答案:

答案 0 :(得分:1)

实例只有在您访问它们后才会缓存到内存中。强制CoreData缓存所有Foo实例可能不是一个好主意,具体取决于最终的内存量。 CoreData非常聪明地管理内存。

话虽这么说,你可以做的是有两个单独的NSManagedObjectContexts,一个用于Foo,另一个用于Bar。您可以在初始化该MOC时预先获取所有Foo实例,并且它们将被MOC保留,直到您在其上调用reset(您可能希望更频繁地在{ {1}} MOC)。

答案 1 :(得分:1)

您不需要两个上下文和所有导致的麻烦。您可以做的是使用Foo将所有NSFetchRequest个对象移植到内存中,并且它会为您提供所需内容。

确保获取请求的includesPropertyValues设置为YES(默认),以便提取所有数据。