.sqlite和.storedata有什么区别

Spa*_*Dog 4 macos core-data ios

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

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

Dav*_*rry 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]) {
Run Code Online (Sandbox Code Playgroud)

至:

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