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