Dha*_*ush 2 sqlite core-data vacuum ios
在我们的应用程序中,我们正在通过网络/电子邮件实现部分Core Data SQLite数据库的共享.为了保持文件小,我已经实现了以下方法来缩小Core Data数据库.
- (void) shrinkDB
{
sqlite3 * database;
NSString * string = [shareStoreURL path];
const char * filename = [string cStringUsingEncoding:[NSString defaultCStringEncoding]];
char *errMsg;
if (sqlite3_open(filename, &database) == SQLITE_OK)
{
NSLog(@"Shrinking...");
if (sqlite3_exec(database, "VACUUM;", NULL, NULL, &errMsg) != SQLITE_OK)
{
NSLog(@"Failed execute VACUUM");
}
sqlite3_close(database);
}
}
Run Code Online (Sandbox Code Playgroud)
问题:上面的代码确实缩小了数据库.但Apple表示Core Data的实施细节随时都可能发生变化.你觉得在可预见的将来我会安全使用这种方法吗?或者还有其他更好的解决方案吗?
执行此操作的正确方法是将NSSQLiteManualVacuumOption提供给持久性存储协调器.
来自文档的片段:
NSSQLiteManualVacuumOption
用于重建存储文件的选项键,在将存储添加到协调器时强制进行数据库范围的碎片整理.这会调用SQLite的VACUUM命令.SQLite商店以外的商店会忽略它.适用于OS X v10.6及更高版本.在NSPersistentStoreCoordinator.h中声明.
请参阅:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSPersistentStoreCoordinator_Class/NSPersistentStoreCoordinator.html
| 归档时间: |
|
| 查看次数: |
3302 次 |
| 最近记录: |