zoukankan      html  css  js  c++  java
  • Realm多线程中的那些坑...

    个人在开发中遇到的一些小坑... 可能会持续更新...

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

    也就是说。假设你在主线程中new了一个RealmObject对象 user。那么在子线程中是訪问不了user对象的。
    要想在子线程中訪问,必须先将user存入Ream中,然后在子线程中query出来。

    2.假设Realm关闭,全部查询得到的RealmObject都不能使用了。

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

    3.假设想在Realm.close()之后继续操作查询得到的对象,仅仅能复制一份数据传出来。
    为防止Realm忘记关闭,个人喜欢将Realm的开启和关闭封装在一个函数中。想这样

    public User getRealmObject(String code){
    Realm realm = Realm.getDefaultInstance();
    User user = realm.where(User.class)
    .equalTo("code" code)
    .findFirst();
    realm.close();
    return user;
    }

    
    
    注意,上面的代码是错误的。!!

    。查出来的user根本不能做不论什么操作!。!

    realm Colse掉之后,user对象就不能訪问了,所以仅仅能复制一份数据传出来。
    这个比較坑。Realm开发人员是为了它的一个特色功能Auto-Update,即自己主动更新查询到的数据。
    特意让查询得到的数据与数据库中的数据保持了同步。所以Realm一关,外面的数据也用不了。

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

    假设你的RealmObject非常复杂,要copy一份数据将会非常麻烦...
    并且这还不是最坑的,最坑的是以下这条。

    4.假设直接改动或删除query得到的数据。必须在transaction中完毕...
    也就是说,你根本不能把query返回的对象。当成普通对象去赋值或删除。假设想要直接操作...ok。把对象copy一份传出来...

    临时就这些吧。
  • 相关阅读:
    asp.net MVC 3/4 equivalent to a response.filter
    Asp.net MVC Request Life Cycle
    无法完成你的itunes store 请求发生未知错误50
    苹果Mac OS X系统十三年视觉变化发展史
    authentication not supported Connect to TFS Git from Xamarin Studio (non-hosted, locally installed TFS 2013)
    iOS开发者帐号申请指南
    Apple Developer Registration and DUNS Number Not Accepted
    apple developer D-U-N-S® Number
    苹果企业开发者账号申请记录
    D-U-N-S申请流程
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7211232.html
Copyright © 2011-2022 走看看