ios - Realm 数据库锁定?

标签 ios swift realm realm-cocoa

在同步时,我用服务器的数据覆盖我所有的本地数据。为此,我首先为所有对象调用 realm.delete(realm.objects(MyObj))。然后我用 realm.add(obj, update: false) 保存响应的对象。一切都在一次交易中。负载可能需要一段时间才能处理,但它不足以证明实现分页是合理的。

用户在这个过程中能否正常使用应用?他们能否存储在交易清算部分删除的新项目,或者会在添加部分触发错误或被覆盖的新项目?如果是,我该如何避免这种情况?

最佳答案

Realm 使用多版本并发控制算法。这使用锁来确保独占写入,而其他线程可以继续读取以前版本的数据。我们有一个 article on our blog ,它更深入地解释了它是如何工作的。

请注意,您在此处尝试解决的问题并非微不足道的挑战。

Can they store new items that are deleted in the clearing part of the transaction, or that would trigger an error or be overwritten during the adding part?

当后台事务正在进行时,其他写入事务将被阻止。如果您从主线程执行这些写入,您将阻塞主线程。如果您从后台线程执行它们,它们将排队并在您的同步事务完成后执行。

一开始被删除的对象将变得不可访问(您可以通过invalidated 检查),因为写入事务总是在最新版本上运行。如果您的对象在同步操作中具有一致的主键,您可以利用这些来重新获取它们并重新对新实例进行所有修改。但请注意,在开始写入事务之前,您需要将主键(和所有其他对象数据)存储到内存中,这意味着隐式刷新。

关于ios - Realm 数据库锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37344290/

相关文章:

html - 在swift 4.2中加载动态html页面时,如何在iOS上实现wkWebview的本地自定义字体?

ios - 带有滚动 ViewController 的容器 ViewController

arrays - 如何在 Swift 中打乱数组?

swift - 如何使用 Swift 遍历 Realm 中的结果

ios - 在 Xcode 中保存 NSMutableArray 的其他方法

cocoa-touch - 在没有 UITabBar 或 UINavigationBar 的 iOS 中编排多个 View 的最佳方式?

SwiftUI:如何迭代可绑定(bind)对象的数组?

ios - 为 UIView 实例设置 semanticContentAttribute 不会将布局应用于所有 subview

javascript - 使用 Realm React Native 查找 Realm 文件的路径以与 Realm 浏览器一起使用

android - 检测 Realm 数据库中的更改并更新远程数据库android