gpt4 book ai didi

ios - 在整个应用程序中使用单个 Realm 实例/变量

转载 作者:搜寻专家 更新时间:2023-10-31 22:20:39 25 4
gpt4 key购买 nike

目标:减少内存占用

我的方法是在 AppDelegate 类中创建单个 Realm 实例,然后访问它,而不是每次都创建一个新变量。

AppDelegate

lazy var realm: Realm = {
let realm = try! Realm()
// Get our Realm file's parent directory
if let folderPath = realm.configuration.fileURL?.URLByDeletingLastPathComponent?.path{
// Disable file protection for this directory
do {
try NSFileManager.defaultManager().setAttributes([NSFileProtectionKey: NSFileProtectionNone],ofItemAtPath: folderPath)
}catch {
printDebug(error)
}
}
return realm
}()

UIViewController

var realm = (UIApplication.sharedApplication().delegate as! AppDelegate).realm

// Access/Modify realm object
try! self.realm.write{
location.imageFile = fileName
}

Questions

<强>1。这是否有助于减少内存使用量?

<强>2。有什么缺点?

最佳答案

有趣的问题

1.在我看来,主要缺点是如果您要将 GCD 与 Realm 一起使用。请记住,Realm 是线程安全的,因此您不能跨线程/队列使用/修改 Realm 对象。

我用单例的 Manager 处理 Realm。也许有人有更好的解决方案,但这非常有效。

class CouponManager: NSObject {
/// path for realm file
lazy private var realmURL: NSURL = {
let documentUrl = NSFileManager.defaultManager().URLsForDirectory(.CachesDirectory, inDomains: .UserDomainMask)[0]
let url = documentUrl.URLByAppendingPathComponent("coupons.realm")
return url
}()
lazy private var config:Realm.Configuration = {
return Realm.Configuration(
fileURL: self.realmURL,
inMemoryIdentifier: nil,
encryptionKey: "my65bitkey".dataUsingEncoding(NSUTF8StringEncoding),
readOnly: false,
schemaVersion: 1,
migrationBlock: nil,
deleteRealmIfMigrationNeeded: false,
objectTypes: nil)
}()

static let shared: CouponManager = CouponManager()

func save(coupons coupons:[Coupon]) {
let realm = try! Realm(configuration: config)
try! realm.write(){
realm.deleteAll()
realm.add(coupons)
}
}

func load() -> Results<Coupon> {
let realm = try! Realm(configuration: config)
return realm.objects(Coupon)
}

func deleteAll() {
let realm = try! Realm(configuration: config)
try! realm.write({
realm.deleteAll()
})
}
}

2。使用 Realm 时,您不必担心内存问题。正如 TiM(他在 Realm 工作)在 this answer 中所说的那样并且您应该在每次需要时实例化 Realm。

关于ios - 在整个应用程序中使用单个 Realm 实例/变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38760005/

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