正确的领域使用模式/最佳实践?

我们正在将一个项目转换为使用“王国”。到目前为止,我们真的印象深刻,尤其是与王国浏览器(如此方便!).

因此,出现了一些问题,在进一步讨论之前,我们希望得到一些具体的使用模式。我们的应用程序是多线程的(API 调用,动画等) ,所以请记住,当阅读问题,因为我知道王国实例不能跨线程访问(目前)。

  • 我们应该有多担心重复创建域的实例? 开销是什么?
  • 我们是否应该在 ViewController 或 Singleton 中保留域实例 重复使用?我们已经尝试过这种方法,但有时实例是从不同的线程访问的,因此每次都必须恢复到创建一个新实例。
  • 访问域实例上的关系属性时,为 保留在内存中读取或从中读取的结果数据 磁盘每次? 我们必须担心保留的王国实例 由于深度关系访问而变得太大?
  • 什么时候刷新一个境界实例是必要的? 我已经注意到,当 我在王国浏览器的变化,他们是反映在一个保留 领域没有调用刷新。
    • 根据文档,似乎每个领域上都有一个 Auto-Refresh 属性会导致这种情况。
  • 访问 Object上的 realm属性是不好的做法吗?如果使用对象的函数没有创建对象,或者对象(当然是在同一个线程上) ,那么我们可以使用这个函数来编写对象。

比如说..。

func saveStuff(thingToUpdate: Object?) {
if let thingToUpdate = thingToUpdate, let realm = thingToUpdate.realm {
realm.write {
thingToUpdate.name = "lionpants"
}
}
}

提前谢谢。我期待你的回答

7868 次浏览

(免责声明: 我为「幻界」工作。我已经离开王国现在,但我仍然很高兴帮助!) :) 非常感谢! 很高兴听到你正在享受王国!

多域实例 - 你根本不需要担心这个!在每个线程的第一次实例化时都会创建一个域文件对象,每次尝试实例化它之后,都会返回相同的对象。

保留域实例 - 接下来从第一点开始,不,你不需要担心在其他对象中保持对境界的引用。当域在内部跟踪它的域文件对象并返回相同的文件对象时,您不会因为没有这样做而受到惩罚。也就是说,如果在对象内部永久引用某个 Dream 对象可以简化代码的复杂性,那么您可以继续使用它。

访问域关系属性 - 严格地说,来自 Realmfile 的数据不是从磁盘复制的(就像普通的 ORM 那样) ; 它更多的是使用内存映射直接从磁盘引用数据到您的内存属性。所以,不,您不需要担心“王国”文件在内存中变得太大。

自动刷新 自动刷新仅在默认情况下为主线程上的“域”文件对象启用。它必须手动为其他线程上的焊接文件对象启用,或者您可以选择使用 refresh方法调用手动刷新它们。

编辑: 我认错!默认情况下,多个线程上的所有域文件对象都打开了 autorefresh。当 autorefresh打开时,唯一需要调用 refresh的时间是,在运行循环的当前迭代完成之前,您需要在其他引用中反映对某个焊接文件所做的更改。

引用对象的域引用 绝对不是,这根本不是坏习惯!我实际上更喜欢在我自己的个人应用程序中这样做,这些应用程序使用王国来提供适当的上下文,因为它总是更容易,并且在代码中提供对象和它的父王国文件之间更强的视觉上下文。(哈哈,是的,如果这里有一个线程问题,你可能在到达 write点之前就已经发现了)。


我希望这有帮助! 让我知道,如果你需要澄清什么在这里!