在发送托管对象上下文save:
消息之前,对托管对象所做的修改仅保存在内存中,不会提交到数据库。那么它如何对数据库执行查询呢?它必须执行标准的 SQL 查询,然后查询未保存的对象并合并结果,这应该非常慢。
更新: 例如,我有文章 <-> 标签多对多关系,并且有许多未保存的文章。然后我想找到具有某些标签或某些日期之间的所有文章。在数据库中,这将是对我们的关系表或日期字段的查询,并将使用适当的索引。但是对于未保存的对象,它必须迭代所有未保存的文章和/或其标签?或者对于未保存的对象,它也有一些类似数据库的存储?
最佳答案
默认情况下,当您执行提取时,Core Data 不会查询挂起的更改 - 您需要使用提取请求的 setIncludesPendingChanges
属性显式设置此设置。
假设您已启用此功能:我不确定为什么您认为查询未保存的更改会变慢。
如果您的 Core Data 实例由 SQLite 存储支持,那么您需要从持久存储(磁盘)读取数据库。您未保存的对象仍将位于 RAM 中 - 访问这些未保存的对象比访问数据库中的对象要快得多。您可以并行执行这两个查询,然后合并结果 - 合并数组很简单 - 这意味着几乎没有性能损失。
总会有异常(exception)和边缘情况,但一般来说,不应该有明显的性能损失。
关于objective-c - 如何使用 SQLite 存储在 Core Data 中查询未保存的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12866865/