【问题标题】:How exactly does Realm() work?Realm() 究竟是如何工作的?
【发布时间】:2016-11-22 05:44:19
【问题描述】:

在开发新的 Swift 3 iOS 应用程序时,我已经使用 Realm 几天了,总的来说,使用它肯定比使用 CoreData 更愉快。

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

let realm = try! Realm()

...确实如此,以及使用此行的多个版本是否有意义(甚至是强制性的),或者一次调用是否足以满足整个应用程序。

因此,如果任何对 Realm 有深入了解的人可以提供帮助,我将不胜感激。

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

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

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

  3. 为什么 Realm 使用 try! 及其所有方法?这仅仅是为了简化各种教程和示例源文件中的演示吗?还是说我们真的打算在使用 Realm 时抑制生产中的此类错误?

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

【问题讨论】:

    标签: ios swift mobile realm


    【解决方案1】:

    感谢您使用 Realm!我们将研究使文档更清晰。同时:

    1. 那行代码为您提供了一个领域的实例,realm。特别是,Realm() 为您提供默认领域,它只是使用默认配置对象指定其配置的领域。 (目的是如果您的应用程序只有一个 Realm,您可以简单地使用此 API 来获取对它的引用,而无需显式传入配置结构。)您可以像使用任何其他 Swift 对象一样在此实例上调用 API ,或将其传递给需要 Realm 参数的其他 API。
    2. 像使用普通对象一样使用realm 实例,不用担心流或任何其他隐藏状态。唯一的限制是您不应在线程或队列之间传递 Realm 实例。
    3. 我们文档中的try! 主要是为了简洁。生产应用程序是否需要避免使用try! 取决于是否可以合理地预期它可以从尝试打开领域的失败中恢复,以及如果领域打开失败是否需要发生特殊行为。你可以看到可能的错误here

    最后一点:Realm(即磁盘数据库)和 Swift 中 Realm 类的实例之间有一个重要区别。多个Realm 实例可能引用相同的底层Realm 数据库,如果它们是使用相同的配置值创建的。例如,您可能在应用程序的不同部分或不同线程上有多个 Realm 实例(以遵守上述相同线程的要求)。我们的一些用户选择创建一个“管理器”单例对象,该对象在启动时打开一个特定的 Realm,处理可能发生的任何错误,并将Realm 实例出售给可能需要从数据库读取或写入的 UI 代码。当然,这种模式是否适合您取决于您​​的编码风格和应用的具体需求。

    希望有帮助!

    【讨论】:

      【解决方案2】:

      据我所知,可能不太正确:

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

      【讨论】:

        猜你喜欢
        • 2011-06-26
        • 2021-08-15
        • 2012-06-08
        • 2011-10-11
        • 2013-07-05
        • 1970-01-01
        • 2014-09-29
        • 2011-06-01
        • 1970-01-01
        相关资源
        最近更新 更多