使用 NSPersistentContainer 从核心数据 SQLite 存储中回收 space?

Reclaim space from Core Data SQLite store with NSPersistentContainer?

我的应用程序使用带有 SQLite 存储的 Core Data 实现了一个网络缓存(有点像 NSURLCache 但可以更好地控制缓存的内容以及何时可以从缓存中清除)。当旧数据变得太大时,我可以从缓存中清除旧数据,但这当然不会真正减少文件系统中使用的存储量 space。

我知道 NSPersistentStoreCoordinator 可以通过 NSSQLiteManualVacuumOption 选项在打开商店时执行 SQLite 清理,我认为这可能是减小文件大小的好方法(即使我必须暂时关闭并重新打开商店)。

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

或者我是否必须手动建立 Core Data 堆栈才能执行此操作?

否则在使用 NSPersistentConainer 时我还应该如何回收 SQLite 存储 space?

更正:

关于 space 没有被自动回收,我有部分错误。即使没有设置 NSSQLiteManualVacuumOption,磁盘 space 也会自动回收 - 有时。我不确定这是如何工作的。它不会立即发生,也不会在我每次保存上下文时发生,但当它确实发生时,从上下文中删除托管对象并保存上下文后很快就会发生。

如果我执行一系列 delete/save 命令,存储 space 不会在它们之间被释放。但是如果我不久之后再次检查,space 已被回收(有时)。

也许 Core Data 默认使用 'auto_vacuum' SQLite pragma?尽管如果我记录 sqlite pragmas,它只会打印一个空字典。

我觉得应该是这样的;我自己从来没有做过:

在加载商店之前创建 NSPersistentStoreDescription and set the options to include the NSSQLiteManualVacuumOption. Assign this description to the the NSPersistentContainer's persistentStoreDescriptions 属性。