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