gpt4 book ai didi

ios - 如何在 iOS 上压缩 Realm DB?

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:06 24 4
gpt4 key购买 nike

我想定期压缩 iOS 上的 Realm 实例以回收空间。我认为这个过程是将数据库复制到一个临时位置,然后将其复制回来并使用新的 default.realm 文件。

我的问题是 Realm() 就像一个单例并回收对象,所以我不能真正关闭它并告诉它打开新的 default.realm 文件。

此处的文档 (https://realm.io/docs/objc/latest/api/Classes/RLMRealm.html) 建议我将所有 Realm() 调用包装在 autorelease { } 中,但它不能这么复杂。

最佳答案

完全拆除所有检索到的模型访问器确实很棘手,但不幸的是,没有其他方法可以关闭 Realm。

如您所写,“定期”每次启动应用程序可能就足够了,具体取决于您的用例。

在您的应用程序启动时,在专用的自动释放池中打开 Realm 应该还是相对容易的,将压缩副本写入不同的路径并用它替换您的 default.realm 文件。

swift 2.1

func compactRealm() {
let defaultURL = Realm.Configuration.defaultConfiguration.fileURL!
let defaultParentURL = defaultURL.URLByDeletingLastPathComponent!
let compactedURL = defaultParentURL.URLByAppendingPathComponent("default-compact.realm")

autoreleasepool {
let realm = try! Realm()
realm.writeCopyToPath(compactedURL)
}
try! NSFileManager.defaultManager().removeItemAtURL(defaultURL)
try! NSFileManager.defaultManager().moveItemAtURL(compactedURL, toURL: defaultURL)
}

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
compactRealm()

// further setup …

return true
}

swift 3.0

func compactRealm() {
let defaultURL = Realm.Configuration.defaultConfiguration.fileURL!
let defaultParentURL = defaultURL.deletingLastPathComponent()
let compactedURL = defaultParentURL.appendingPathComponent("default-compact.realm")

autoreleasepool {
let realm = try! Realm()
try! realm.writeCopy(toFile: compactedURL)
}
try! FileManager.default.removeItem(at: defaultURL)
try! FileManager.default.moveItem(at: compactedURL, to: defaultURL)
}

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
compactRealm()

// further setup …

return true
}

关于ios - 如何在 iOS 上压缩 Realm DB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36877745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com