为每个操作创建 Realm 实例的开销/问题?

Overhead / problems of creating Realm instances for each operation?

我将我的代码拆分成许多小函数,这些函数有时会在一个事务中一起执行。所以我在某个地方创建了一个 Realm 并打开了一个 write 块,在这个块中我调用了我所有的函数。

到目前为止,我一直将 Realm 实例作为参数传递给函数以便重新使用(对于 realm.add 之类的调用),但我想知道这是否真的有必要?在需要的地方简单地创建 Realm 的新实例有什么缺点吗?我也想知道,万一这不是问题,如果这个新领域正在 "started by" 另一个领域实例的交易中使用,如果这可能是一个问题。

最后,我还想知道用于抑制执行更新通知块的通知令牌是否可能存在任何问题 - 为此,我使用的特定 Realm 实例无关紧要,对吧?

P.S。我只是在谈论在同一线程中使用 Realm,我知道多线程限制。

如果您想以这种方式构建代码,则在函数之间传递 Realm 实例没有任何坏处。在同一线程上打开多个 Realm 实例也没有任何明显的开销,因为 Realm Cocoa 有一个内部缓存,它在同一线程上出售 Realms 时使用。

我认为反对重复打开 Realm 的一个可能论点是您必须使用 try!,或者将每次打开 Realm 的尝试包装在 do 中-catch 块。但是,在大多数情况下,如果您已经打开一个 Realm,通过创建更多 Realm 个实例再次成功打开它不会导致与文件相关的错误(只要您没有通过移动底层数据库文件滥用 Realm) .

您也不必担心未由特定 Realm 实例分发或在另一个 Realm 实例的写入中使用一个 Realm 实例的通知令牌交易;如果您确实在同一个线程上工作,那么在您描述的情况下,Realm 应该可以正常工作。 (如果没有,请 file a bug 反对我们!)

更一般地说,只有当您 运行 遇到性能问题并且 Instruments 已将特定操作识别为潜在的性能瓶颈时,才最好担心优化。你的情况,我觉得你可以选择更符合你个人喜好的方案。