怎樣看待 Realm 這個移動數(shù)據(jù)庫?

Realm

作者:匡宇

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

來源:知乎

著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)。

1.RealmObject自帶線程保護(hù)功能,只能在創(chuàng)建它的線程中訪問,在子線程中不能訪問。

也就是說,如果你在主線程中new了一個RealmObject對象 user,那么在子線程中是訪問不了user對象的。

要想在子線程中訪問,必須先將user存入Ream中,然后在子線程中query出來。

2.如果Realm關(guān)閉,所有查詢得到的RealmObject都不能使用了。

如果想在子線程中去查詢數(shù)據(jù),然后在主線程中使用是無法做到的。所以Realm提供的異步查詢就很重要了...

3.如果想在Realm.close()之后繼續(xù)操作查詢得到的對象,只能復(fù)制一份數(shù)據(jù)傳出來。

為防止Realm忘記關(guān)閉,個人喜歡將Realm的開啟和關(guān)閉封裝在一個函數(shù)中。

但是realm Colse掉之后,query得到對象就不能訪問了,所以只能復(fù)制一份數(shù)據(jù)傳出來。

這個比較坑,Realm開發(fā)者是為了它的一個特色功能Auto-Update,即自動更新查詢到的數(shù)據(jù),

特意讓查詢得到的數(shù)據(jù)與數(shù)據(jù)庫中的數(shù)據(jù)保持了同步,所以Realm一關(guān),外面的數(shù)據(jù)也用不了。

而且,這個Auto-update暫時還無法關(guān)閉,stackOverFlow上有說以后可能會提供關(guān)閉這個功能的方法。

如果你的RealmObject非常復(fù)雜,要copy一份數(shù)據(jù)將會很麻煩...

而且這還不是最坑的,最坑的是下面這條。

4.如果直接修改或刪除query得到的數(shù)據(jù),必須在transaction中完成...

也就是說,你根本不能把query返回的對象,當(dāng)成普通對象去賦值或刪除,如果想要直接操作...ok,把對象copy一份傳出來...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容