.sqlite和.storedata有什么区别

时间:2014-04-16 18:52:59

标签: ios macos core-data

当您使用核心数据在Xcode上启动新的iOS项目时,它会使用扩展名.sqlite初始化数据库。当您为OSX的新项目执行相同操作时,数据库具有扩展名.storedata

这两者有什么区别吗?谢谢。

1 个答案:

答案 0 :(得分:8)

iOS上的CoreData仅支持sqlite持久性存储。 OS X上的CoreData支持多种格式,包括sqlite和xml,默认持久性存储是基于xml的。因此.sqlite是CoreData的sqlite持久性存储,而.storedata是一个xml持久性存储。

为了扩展答案,sqlite持久性存储允许模型部分地和递增地加载,而xml持久性存储仅允许(要求)模型加载模型。默认值的差异可能是由两个平台上的不同内存可用性所解释的。如果在典型的Mac上有更多可用内存,则可以通过一次加载所有内容来提高整体性能。

要将默认代码切换为使用sqlite而不是xml,请修改persistentStoreCoordinator并更改:

NSURL *url = [applicationFilesDirectory URLByAppendingPathComponent:@"Foo.storedata"];
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];
if (![coordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:nil error:&error]) {

为:

NSURL *url = [applicationFilesDirectory URLByAppendingPathComponent:@"Foo.sqlite"];
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];
if (![coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error]) {