核心数据和iOS 7:持久存储的不同行为

我正在准备iOS 7的基于核心数据的应用程序的更新修复。我使用Xcode 5和iOS 7 SDK GM。 然而,我意识到持久性存储(这是一个UIManagedDocument )的不同行为:在iOS 7构build之前,文档文件夹中只有一个文件persistentStore (有时还有第二个persistentStore-journal )。

在iOS 7构build(干净安装)中,现在有三个文件用于持久性存储:

  • persistentStore
  • persistentStore-wal
  • persistentStore-shm

苹果是否现在默认更改日记模式为WAL? 我想知道是否对我的应用程序有影响(想想用户如何从最新版本更新)? 最好是禁用WAL – 如果是的话,我怎样才能做到这一点与iOS 7 / UIManagedDocument

是的,苹果公司已经将默认日记模式更改为适用于iOS7的WAL。 在调用addPersistentStoreWithType时,您可以通过将NSSQLitePragmasOption添加到选项来指定日记模式:configuration:url:options:error。 例如,设置DELETE之前的默认模式:

 NSDictionary *options = @{ NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"} }; 

根据我的经验,WAL提供了更好的性能,但也看到这个post:

iOS CoreData – 启用sqlite WAL / Write-Ahead Logging有什么缺点