Swift中Realm实例的全局使用

时间:2017-01-26 21:50:16

标签: swift realm

在我使用Realm的每个视图控制器中,我将领域作为属性添加到每个类中:

//Whatevs.swift
class Whatevs:NSViewController{
  let realm = try! Realm()
}

然后我通过self.realm在整个课程中引用它。

有没有理由不让它像这样全局可用的实例?

//Global.swift <-- General swift file in my app
let realm = try! Realm() //<-- Not inside a class

1 个答案:

答案 0 :(得分:8)

实际上,如果它可以得到帮助,通常不会挂在Realm个实例上。 :)

在特定线程上调用Realm()后,Realm将在内部缓存该实例,并在后续的Realm()调用中返回相同的实例。因此,作为这样的类成员挂在Realm实例上没有明显的性能提升。

如果您在应用程序中执行任何类型的线程操作,则需要小心存储Realm引用,因为在后台线程上调用self.realm将触发异常。

如果您只处理默认的Realm,那么最佳做法是在您实际需要时调用let realm = try! Realm()

如果您正在处理依赖于特定Configuration实例的不同类型的域,那么建议将它们存储为全局常量。领域Configuration对象是线程安全的,因此可以将它们传递给后台线程以在那里创建Realm个实例而没有任何问题。