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

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一份传出来...

临时就这些吧。

Realm多线程中的那些坑...的更多相关文章

  1. Java面试中遇到的坑【填坑篇】

    看到大家对上篇<Java面试中遇到的坑>一文表现出强力的关注度,说明大家确实在面试中遇到了类似的难题.大家在文章留言处积极留言探讨面试中遇到的问题,其中几位同学还提出了自己的见解,我感到非 ...

  2. 整理iOS9适配中出现的坑(图文)

    原文: http://www.cnblogs.com/dsxniubility/p/4821184.html 整理iOS9适配中出现的坑(图文)   本文主要是说一些iOS9适配中出现的坑,如果只是要 ...

  3. c#初学-多线程中lock用法的经典实例

    本文转载自:http://www.cnblogs.com/promise-7/articles/2354077.html 一.Lock定义     lock 关键字可以用来确保代码块完成运行,而不会被 ...

  4. iOS多线程中,队列和执行的排列组合结果分析

    本文是对以往学习的多线程中知识点的一个整理. 多线程中的队列有:串行队列,并发队列,全局队列,主队列. 执行的方法有:同步执行和异步执行.那么两两一组合会有哪些注意事项呢? 如果不是在董铂然博客园看到 ...

  5. Nancy总结(二)记一次Nancy 框架中遇到的坑

    记一次Nancy 框架中遇到的坑 前几天,公司一个项目运行很久的Nancy框架的网站,遇到了一个很诡异的问题.Session 对象跳转到另外一个页面的时候,session对象被清空了,导致用户登录不上 ...

  6. 整理 iOS 9 适配中出现的坑(图文)(转)

    作者:董铂然 本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iOS9正式版,随着 ...

  7. 解决DataGridView在多线程中无法显示滚动条的问题

    在多线程中对DataGridView指定 DataSource 来填充数据,更新数据的时候,会导致DataGridView出现假死,显示错误或者滚动条无法显示的问题,在保证了DataGridView的 ...

  8. iOS开发——多线程OC篇&多线程中的单例

    多线程中的单例 #import "DemoObj.h" @implementation DemoObj static DemoObj *instance; // 在iOS中,所有对 ...

  9. c#语言-多线程中的锁系统(一)

    介绍 平常在多线程开发中,总避免不了线程同步.本篇就对net多线程中的锁系统做个简单描述.   目录 一:lock.Monitor        1:基础.        2: 作用域.       ...

随机推荐

  1. $.extend(object) 和 $.fn.extend(object)

    1.jQuery.extend(object); 它是为jQuery类添加类方法,可以理解为添加静态方法.如: jQuery.extend({ min: function(a, b) { return ...

  2. why switch kernel mode and user mode expensive

    Because that means context switching(save context, restore context)

  3. .net web api ioc unity usage

    1.use nuget to install unity.webapi 2.add configurations in application_start folder using Microsoft ...

  4. Codevs 1643 & 3027 线段覆盖

    1643 题意 给定若干条线段,问最多可以安排多少条使得没有重合. 思路 贪心,同安排schedule,按结束时间早的排序. Code #include <bits/stdc++.h> # ...

  5. 转 C/C++内存分配方式与存储区

    C/C++内存分配方式与存储区 C/C++内存分配有三种方式:[1]从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量.[2]在栈 ...

  6. RSTP介绍

    1. 介绍 RSTP(Rapid Spanning Tree Protocol),快速生成树协议,标准为802.1w(已合入802.1D-2004)RSTP是对STP技术的修改和补充,最大特点就是快速 ...

  7. AC日记——幸运号码 51nod 1043

    幸运号码 思路: 传说中的数位dp: 不难发现,n(n<1000) ,那么,n个数的最大和为9*1000=9000: 对于9000*1000的时间范围,我们可以用dp来解决: dp[i][j], ...

  8. CSU 1785: 又一道简单题

    1785: 又一道简单题 Submit Page   Summary   Time Limit: 5 Sec     Memory Limit: 128 Mb     Submitted: 602   ...

  9. HDU 1007 Quoit Design【计算几何/分治/最近点对】

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  10. Nowcoder Girl 参考题解【待写】

    [官方题解]:https://www.nowcoder.com/discuss/65411?toCommentId=1134823 [题目链接]:https://www.nowcoder.com/te ...