我们正在将项目转换为使用Realm。到目前为止,特别是对于Realm Browser来说,我们印象深刻(非常方便!)。
结果,出现了一些问题,我们希望在进一步进行讨论之前先弄清一些具体的使用模式。我们的应用程序是多线程(API调用,动画等),因此在阅读问题时请记住这一点,因为我知道Realm实例无法(当前)跨线程访问。
realm
Object
例如…
func saveStuff(thingToUpdate: Object?) { if let thingToUpdate = thingToUpdate, let realm = thingToUpdate.realm { realm.write { thingToUpdate.name = "lionpants" } } }
提前致谢。期待您的答复。:D
(免责声明: 我为Realm工作。 我现在已经离开了Realm,但我仍然很乐意为您提供帮助!):)非常 感谢!很高兴听到您喜欢Realm!
多个领域实例 -您完全无需担心!在每个线程上首次实例化时都会创建一个Realm文件对象,并且每次尝试并在之后每次实例化该对象时,都会返回该对象。
保留Realm实例 -从第一点开始,不,您不必担心要挂在其他对象内部的Realm引用。由于Realm在内部跟踪其Realm文件对象并返回相同的对象,因此您不会因未这样做而受到惩罚。话虽如此,如果在对象内部永久引用Realm对象简化了代码复杂度,请随时使用它。
访问Realm关系属性 -严格来说,不是从磁盘复制Realm文件中的数据(就像普通的ORM那样)。而且它使用内存映射直接将磁盘中的数据直接引用到您的内存中属性。因此,不,您不必担心Realm文件的内存过大。
自动刷新 默认情况下,仅对主线程上的Realm文件对象启用自动刷新。 必须为其他线程上的Realm文件对象手动启用它,或者您可以选择使用refresh方法调用手动刷新它们。
refresh
编辑: 我站纠正!autorefresh默认情况下,多个线程上的所有Realm文件对象均处于启用状态。如果autorefresh是,你需要调用唯一的一次refresh是,如果你需要体现在其他文献的运行循环的当前迭代完成之前到领域文件所做的更改。
autorefresh
引用对象的Realm引用 绝对不是,这不是一个坏习惯!实际上,我更喜欢在使用Realm的个人应用程序中执行此操作,以提供适当的上下文,因为它总是更容易,并且在对象及其代码中的父Realm文件之间提供了更强的可视上下文。(哈哈,是的,如果这里有线程问题,您甚至可能在发现问题之前就已经发现了write)。
write
希望对您有所帮助!让我知道您是否需要在这里澄清任何内容!