对Realm数据库多线程下被调用的处理

本文介绍了在多线程环境下如何正确处理Realm数据库的调用。 Realm允许并发访问,但禁止跨线程传递Realm对象。建议在每个线程中检查并刷新Realm实例,以确保数据的同步。此外,讨论了自动刷新的时机及其潜在问题,以及在提交写事务时的数据刷新。文章提供了一种在多线程场景下安全使用Realm的方法,通过检测线程并适时刷新数据库,以确保数据一致性。
摘要由CSDN通过智能技术生成

Realm是一个非常方便的数据库,但是也有其局限性。正如Realm官方文档所述:

Threads
Although Realm files can be accessed by multiple threads concurrently, you cannot hand over Realms, Realm objects, queries, and results between threads.

虽然每个线程都能取到Realm文件,但是这些文件并不能在线程间通信。当你取出一个RealmObject,若想使用其最新数据,需要调用[RLMRealm refresh]方法,或者将RLMRealm的autorefresh参数设为YES。

而官方文档提到:

Realms are automatically refreshed at the start of every runloop iteration

autorefresh让Realm在每个runloop循环开始的时候自动刷新,所以一般不推荐设置为自动刷新。

[RLMRealm commitWriteTransaction]方法被调用的时候Realm数据也将被刷新。

所以在一个类调用Realm数据时,可以这样处理:

- (RLMObject *)RLMObj {  @synchronized (RLMObj) {      if (!_RLMObj || _RLMObjTread != [NSThread currentThread]) {          [[RLMRealm defaultRealm] refresh];          _RLMObjTread = [NSThread currentThread];          _RLMObj 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值