Realm()究竟是如何工作的?

时间:2016-11-22 05:44:19

标签: ios swift mobile realm

在使用新的Swift 3 iOS应用程序时,我一直在使用Realm几天,总的来说,使用它比CoreData更令人愉快。

但是,文档似乎不够详细,无法帮助我弄清楚究竟是什么......

let realm = try! Realm()

...确实,以及使用此行的多个版本是否有意义(或甚至是强制性的),或者对于整个应用程序来说,单个调用是否足够。

因此,如果任何对Realm有全面了解的人都可以提供帮助,我会很感激。

我的问题,按重要性顺序排列:

  1. 上面的代码行到底是做什么的?它是否会打开某种文件管理器流,只要应用程序仍在运行,它就允许我的应用程序写入和读取Realm数据文件?

  2. 或者我是否需要在每次Realm读/写操作之前使用此行?或者它是介于两个极端之间的东西,例如需要在每个单独的类/视图控制器中调用,而不是在每次读/写操作之前调用?

  3. 为什么Realm使用try!及其所有方法?这只是为了在各种教程和示例源文件中简化演示的目的吗?或者我们实际上是想在使用Realm时抑制生产中的错误?

  4. 感谢任何和所有的输入,因为Realm文档和示例文件似乎没有提供这些问题的答案,除非我是盲目的,这是一种可能性,所以我愿意被指向相关的文档/适用的参考页。

2 个答案:

答案 0 :(得分:1)

感谢您使用Realm!我们将着眼于使文档更清晰。与此同时:

  1. 这行代码为您提供了一个领域的实例,realm。特别是,Realm()为您提供了默认领域,它只是使用默认配置对象指定其配置的领域。 (目的是,如果您的应用程序只有一个Realm,您可以简单地使用此API来获取对它的引用,而无需显式传入配置结构。)您可以在此实例上调用API,就像使用任何其他Swift对象一样,或将其传递给需要Realm参数的其他API。
  2. 像普通对象一样使用realm实例,不用担心流或任何其他隐藏状态。唯一的限制是你不应该在线程或队列之间传递Realm实例。
  3. 我们文档中的
  4. try!主要是为了简洁起见。生产应用程序是否需要避免使用try!取决于是否可以合理地期望从尝试打开Realm失败中恢复,以及是否需要在Realm无法打开时发生特殊行为。您可以看到可能的错误here
  5. 最后一点:在Realm(磁盘数据库)和Swift中Realm类的实例之间存在重要区别。如果使用相同的配置值创建多个Realm实例,则它们可以引用相同的基础Realm数据库。例如,您可能在应用程序的不同部分或不同的线程上有多个Realm实例(以遵守上述相同的线程要求)。我们的一些用户选择创建一名经理'在启动时打开特定Realm的singleton对象,处理可能发生的任何错误,并将Realm实例淘汰到可能需要从数据库读取或写入的UI代码。当然,这种模式是否适合您,取决于您的编码风格和应用程序的特定需求。

    希望有所帮助!

答案 1 :(得分:0)

根据我的了解,可能不太正确:

  1. 该行代码将创建一个Realm实例来控制当前线程中的域写入/读取,在这种情况下,您使用默认配置调用Realm,如果需要其他配置(如数据库名称),则可以修改配置,路径,...
  2. 只要你在当前的类中创建它或者只是使用默认的Realm(),你就不需要它,意味着你仍然需要它,但只能使它变成类变量
  3. try表示如果您愿意,可以抛出您可以处理的错误,使用try!表示您跳过错误,如果您想要处理它,请与do和{{结合使用1}}处理错误是否发生