我有一个CoreData存储包含两种类型的实体 - Foo
和Bar
由SQLite存储支持。可以预期Foo
具有相对较少的实例(~1000),所有实例都经常被访问和遍历。另一方面,Bar
可以达到数百万,Bar
的每个实例都很少被访问。
我的问题是,CoreData是否已默认优化此类非对称访问?如果没有,有没有办法告诉coreData始终在内存中缓存Foo
的所有实例?
答案 0 :(得分:1)
实例只有在您访问它们后才会缓存到内存中。强制CoreData缓存所有Foo
实例可能不是一个好主意,具体取决于最终的内存量。 CoreData非常聪明地管理内存。
话虽这么说,你可以做的是有两个单独的NSManagedObjectContexts
,一个用于Foo
,另一个用于Bar
。您可以在初始化该MOC时预先获取所有Foo实例,并且它们将被MOC保留,直到您在其上调用reset
(您可能希望更频繁地在{ {1}} MOC)。
答案 1 :(得分:1)
您不需要两个上下文和所有导致的麻烦。您可以做的是使用Foo
将所有NSFetchRequest
个对象移植到内存中,并且它会为您提供所需内容。
确保获取请求的includesPropertyValues
设置为YES
(默认),以便提取所有数据。