ios realm 文件_关于ios:具有后台进程的Realm实例会丢失数据

我将Realm for Swift与仅内存配置一起使用。 由于在后台线程中更新数据库,因此每次使用时都会创建一个Realm实例。 在Realm文档中提到了此问题,这里还有另一个问题https://stackoverflow.com/a/45375608/613121。

但是通过测试数据库,我注意到了不可预测的行为。 有时数据库是空的,更新会重新填充数据库而不是更新。 原因可能是该领域在撰写之后被释放了。

解决方案可能是在主线程中保留强引用。 我将Realm配置保存为单例。 单例返回具有相同配置的新Realm进行更新,并强烈引用另一个Realm以防止丢失,这是否安全?

在stackoverflow.com/questions/41002022/中,在主线程上出现单例提示的情况下讨论了此问题。我的解决方法是在某个线程的配置单例中保留强大的参考。所有工作都是通过新的领域完成的。所以我完全不混淆线程-我希望。也许我应该在主线程上创建带有调度的单例。并且仅当调用者来自另一个线程时才创建新的Realm!

虽然我理解这个问题,但用例尚不清楚。在某些情况下,单例模式可能是一个解决方案,但正如David在该回答中所提到的那样,以线程安全的方式使用Realm的最佳方法是使用let realm = try为您的Realm创建新的引用!每次在线程之间移动时,都会使用Realm()。如果遇到意外结果,则问题可能出在其他地方。添加一些说明问题的代码可能会有所帮助。请花点时间回顾一下如何创建最小,完整和可验证的示例

谢谢杰伊。我每次使用新的Realm实例时都遇到了问题。这似乎工作正常。但是在测试数据库时,它是从后台线程写入数据库并逐步通过调试器后为空的。因此,可能必须强烈参考具有相同配置的领域。现在看来可行。

听起来应该不错。 您必须尝试一下,这可能比在这里等待明确的答案要快。

我将编写一个singleton类,作为构造函数的一部分,它定义Realm配置并将其存储,还打开并存储该领域的实例。 然后,我向该类添加一个访问器,以供您的线程使用; 它将使用相同的配置返回领域的新实例。 当那些超出范围(并且您应该允许它们超出范围)时,由于单例实例保持其引用,您的领域将保持不变。

我可能错误地读了您的第一个参考问题,但这与内存领域无关,因此不要求您在某处保留参考。

是的,我尝试过,它似乎可以工作。 希望在随后被销毁的后台线程中写入新的Realm不会造成任何问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值