gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:31 27 4
gpt4 key购买 nike

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

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

let realm = try! Realm()

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

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

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

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

  2. 或者我是否需要在每次 Realm 读/写操作之前使用这一行?或者它是介于两个极端之间的东西,例如需要在每个单独的类/ View Controller 中调用但不需要在每个读/写操作之前调用?

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

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

最佳答案

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

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

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

希望对您有所帮助!

关于ios - Realm() 究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40734589/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com