【发布时间】:2021-12-10 06:12:32
【问题描述】:
我们正在优化应用启动时间,其中一个巨大的减速来自领域初始化。
我们有这段代码在didFinishLaunchingWithOptions期间被调用
RLMRealmConfiguration *config = [[RLMRealmConfiguration alloc] init];
config.schemaVersion = kCurrentSchema;
config.migrationBlock = /* migration task */;
config.fileURL = fileUrl;
config.encryptionKey = encryptionKey;
return config;
在初始化期间,我们尝试使用此配置至少创建一次RLMRealm,以查看我们是否能够打开领域。如果打开失败,我们将使用NSFileManager 执行操作以删除 Realm 文件夹并重新开始。
一切完成后,我们设置
[RLMRealmConfiguration setDefaultConfiguration:config];
我的问题是
- 能否在后台线程中移动创建
RLMRealmConfiguration和初始化RLMRealm的整个过程? - 迁移完成后,我们能否将后台线程中的
RLMRealmConfigurationcreate 分派给主线程,以便在主线程上调用setDefaultConfiguration?。 - 迁移成功后dispatch到主线程调用
[RLMRealmConfiguration setDefaultConfiguration:config];,后台线程的迁移结果是写入文件还是内存中?如果我在setDefaultConfiguration之后直接在主线程上创建另一个RLMRealm。我可以访问迁移的版本吗?我知道RLMThreadSafeReference,但只有在我们知道如何访问时才能使用。在我的情况下,设置后我们会有太多的访问权限。
【问题讨论】:
-
为了清楚起见,这是一个本地领域,对吧?不是同步领域
-
@Jay 是的,仅限本地领域