ios realm 文件_关于ios:具有后台进程的Realm实例会丢失数据
我將Realm for Swift與僅內(nèi)存配置一起使用。 由于在后臺線程中更新數(shù)據(jù)庫,因此每次使用時都會創(chuàng)建一個Realm實例。 在Realm文檔中提到了此問題,這里還有另一個問題https://stackoverflow.com/a/45375608/613121。
但是通過測試數(shù)據(jù)庫,我注意到了不可預(yù)測的行為。 有時數(shù)據(jù)庫是空的,更新會重新填充數(shù)據(jù)庫而不是更新。 原因可能是該領(lǐng)域在撰寫之后被釋放了。
解決方案可能是在主線程中保留強引用。 我將Realm配置保存為單例。 單例返回具有相同配置的新Realm進行更新,并強烈引用另一個Realm以防止丟失,這是否安全?
在stackoverflow.com/questions/41002022/中,在主線程上出現(xiàn)單例提示的情況下討論了此問題。我的解決方法是在某個線程的配置單例中保留強大的參考。所有工作都是通過新的領(lǐng)域完成的。所以我完全不混淆線程-我希望。也許我應(yīng)該在主線程上創(chuàng)建帶有調(diào)度的單例。并且僅當調(diào)用者來自另一個線程時才創(chuàng)建新的Realm!
雖然我理解這個問題,但用例尚不清楚。在某些情況下,單例模式可能是一個解決方案,但正如David在該回答中所提到的那樣,以線程安全的方式使用Realm的最佳方法是使用let realm = try為您的Realm創(chuàng)建新的引用!每次在線程之間移動時,都會使用Realm()。如果遇到意外結(jié)果,則問題可能出在其他地方。添加一些說明問題的代碼可能會有所幫助。請花點時間回顧一下如何創(chuàng)建最小,完整和可驗證的示例
謝謝杰伊。我每次使用新的Realm實例時都遇到了問題。這似乎工作正常。但是在測試數(shù)據(jù)庫時,它是從后臺線程寫入數(shù)據(jù)庫并逐步通過調(diào)試器后為空的。因此,可能必須強烈參考具有相同配置的領(lǐng)域。現(xiàn)在看來可行。
聽起來應(yīng)該不錯。 您必須嘗試一下,這可能比在這里等待明確的答案要快。
我將編寫一個singleton類,作為構(gòu)造函數(shù)的一部分,它定義Realm配置并將其存儲,還打開并存儲該領(lǐng)域的實例。 然后,我向該類添加一個訪問器,以供您的線程使用; 它將使用相同的配置返回領(lǐng)域的新實例。 當那些超出范圍(并且您應(yīng)該允許它們超出范圍)時,由于單例實例保持其引用,您的領(lǐng)域?qū)⒈3植蛔儭?/p>
我可能錯誤地讀了您的第一個參考問題,但這與內(nèi)存領(lǐng)域無關(guān),因此不要求您在某處保留參考。
是的,我嘗試過,它似乎可以工作。 希望在隨后被銷毀的后臺線程中寫入新的Realm不會造成任何問題。
總結(jié)
以上是生活随笔為你收集整理的ios realm 文件_关于ios:具有后台进程的Realm实例会丢失数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小程序确定取消弹窗_浅析微信小程序mod
- 下一篇: yum配置文件 重启后还原_江湖救急 :