怎样看待 Realm 这个移动数据库?

Realm

作者:匡宇

链接:http://www.zhihu.com/question/30298585/answer/93339976

来源:知乎

著作权归作者所有,转载请联系作者获得授权。

1.RealmObject自带线程保护功能,只能在创建它的线程中访问,在子线程中不能访问。

也就是说,如果你在主线程中new了一个RealmObject对象 user,那么在子线程中是访问不了user对象的。

要想在子线程中访问,必须先将user存入Ream中,然后在子线程中query出来。

2.如果Realm关闭,所有查询得到的RealmObject都不能使用了。

如果想在子线程中去查询数据,然后在主线程中使用是无法做到的。所以Realm提供的异步查询就很重要了...

3.如果想在Realm.close()之后继续操作查询得到的对象,只能复制一份数据传出来。

为防止Realm忘记关闭,个人喜欢将Realm的开启和关闭封装在一个函数中。

但是realm Colse掉之后,query得到对象就不能访问了,所以只能复制一份数据传出来。

这个比较坑,Realm开发者是为了它的一个特色功能Auto-Update,即自动更新查询到的数据,

特意让查询得到的数据与数据库中的数据保持了同步,所以Realm一关,外面的数据也用不了。

而且,这个Auto-update暂时还无法关闭,stackOverFlow上有说以后可能会提供关闭这个功能的方法。

如果你的RealmObject非常复杂,要copy一份数据将会很麻烦...

而且这还不是最坑的,最坑的是下面这条。

4.如果直接修改或删除query得到的数据,必须在transaction中完成...

也就是说,你根本不能把query返回的对象,当成普通对象去赋值或删除,如果想要直接操作...ok,把对象copy一份传出来...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容