使用NSPersistentContainer从Core Data SQLite存储中回收空间?

时间:2019-02-15 09:15:13

标签: sqlite caching core-data vacuum

我的应用程序使用带有SQLite存储的Core Data实现了Web缓存(有点类似于NSURLCache,但对缓存内容以及何时可以从缓存中清除内容有了更多控制)。当缓存过大时,我可以从缓存中清除旧数据,但是当然,这实际上并不会减少文件系统中使用的存储空间。

我知道可以通过NSSQLiteManualVacuumOption选项传递NSPersistentStoreCoordinator来在打开存储区时进行SQLite清除,而且我认为这可能是减小文件大小的好方法(即使我必须暂时关闭并重新开店)。

但是,我正在通过NSPersistentContainer管理核心数据堆栈。有什么方法可以使用NSPersistentContainer进行Apple认可的SQLite真空处理?

或者我必须手动建立Core Data堆栈吗?

否则,当使用NSPersistentConainer时,我还应该如何回收SQLite存储空间?

更正

我对部分空间错误表示不自动回收空间。即使未设置NSSQLiteManualVacuumOption,有时也会自动回收磁盘空间。我不确定这是如何工作的。它不会立即发生,也不会在每次保存上下文时都发生,但是一旦发生,在从上下文中删除托管对象并保存上下文之后,它很快。

如果我执行一系列删除/保存命令,则它们之间的存储空间不会释放。但是,如果不久之后我再次检查,该空间已被收回(有时)。

在默认情况下,核心数据是否正在使用'auto_vacuum'SQLite编译指示?尽管如果我登录sqlite实用程序,它只会打印一个空字典。

1 个答案:

答案 0 :(得分:2)

我认为它应该像这样工作;我从来没有自己做过:

创建一个NSPersistentStoreDescription并设置选项以包含NSSQLiteManualVacuumOption。在加载商店之前,将此说明分配给NSPersistentContainer的{​​{3}}属性。