realm 知识点

来源:互联网 发布:怎么注册淘宝云客服 编辑:程序博客网 时间:2024/04/25 20:32

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
原创粉丝点击