realm 知识点

1  所有的存储对象需要继承RealmObject

       比如我现在的项目的数据从网络请求回来都会继承自己写的一个方便解析的基类,在这里就需要做出一些适应。
但是该问题在swift中是不存在的。因为swift是天生的面向协议编程范式。

2 不能自定义getter、setter

       realm会自动生成getter、setter,如果自定义getter、setter存储就会有影响。如果要规避这个问题,可以通过设置这个对象的忽略属性。
       比如有个属性id,需要自定义setter。可以在对象属性里把id设置为忽略属性,这样realm就不会为它自动生成getter、setter,但是也不会把id存入数据库。接着自定义一个用于存储的属性比如realm_id。在id的setter中可以把把值也赋给realm_id。
       这个问题在swift中也是不存在的,因为swfit中使用的是willset、didset这种通知机制。

3 查询的结果不是数组

       为了能够支持查询结果的链式查询,realm自定义了一个集合类型。可以枚举,但是不是熟悉的数组了。又因为realm的懒加载机制,所以不建议在数据层把这个枚举转成数组类型。这样的缺点就是上层知道了数据的存储逻辑。严格的说这里不应该让上层知道。但是这样设计也许是为了方便上层进行再次检索,realm有着优越的查询性能。

4 realm 数据库是线程安全的

        realm 数据库是线程安全的。但是 RealmObject 不是线程安全的,要跨线程使用RealmObject 是能的。

解决方法:

    4.1,在另一个线程中再次新查询RealmObject 

    4.2, 或者 将RealmObject 从新copy给另一个对象,相当于,一车货物,从A车,倒车到 B车。

    4.3,封装一层数据层,并设置单一的数据层线程。使所有的操作都在一个线程中进行。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值