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

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

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

let realm = try! Realm()

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

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

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

>上面的代码行究竟做了什么?它是否打开某种文件管理器流,只要应用程序仍在运行,它就允许我的应用程序写入和读取Realm数据文件?
>或者我是否需要在每次Realm读/写操作之前使用此行?或者它是介于两个极端之间的东西,例如需要在每个单独的类/视图控制器中调用,而不是在每次读/写操作之前调用?
>为什么Realm会尝试使用!用它的所有方法?这只是为了在各种教程和示例源文件中简化演示的目的吗?或者我们是否真的打算在使用Realm时抑制生产中的错误?

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

最佳答案 感谢您使用Realm!我们将研究使文档更清晰.同时:

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

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

希望有所帮助!

点赞