Realm 使用备忘
关于使用 Realm 的一些疑问解答 👉 链接
为对象设置 primary key
重写 Object.primaryKey()
方法
写操作
向一个 realm 对象添加数据对象的操作,必须在一个 write
事务中进行,因为 write
事务会产生不可预计的耗时操作,因此,应尽量减少 write
事务
write
事务是同步并阻塞的
若 Thread A 开始了一个 write 事务, |
关于使用 Realm 的一些疑问解答 👉 链接
重写 Object.primaryKey()
方法
向一个 realm 对象添加数据对象的操作,必须在一个 write
事务中进行,因为 write
事务会产生不可预计的耗时操作,因此,应尽量减少 write
事务
write
事务是同步并阻塞的
若 Thread A 开始了一个 write 事务, |
在 iOS 8 后,若使用了后台刷新的特性,并且涉及了 Realm, 则需要注意了
App 内的文件在设备锁屏下,会使用 NSFileProtection
自动加密,对 Realm 数据库进行打开操作会抛出异常
因此,需要降低 Realm 数据库文件和它的辅助文件的保护等级,同时,也可以选择使用 Realm 自带的加密方式
降低保护等级,从相关文件的上一层文件夹入手
let realm = try! Realm() |
RealmSwift是一种流行的移动端数据库解决方案,它提供了一种简单且高效的方式来存储和管理移动应用程序的数据。在RealmSwift中,创建一对一关系可以通过以下步骤来实现:
class Person: Object { |
由于最近项目中在用Realm,所以把自己实践过程中的一些心得总结分享一下。
Realm是由Y Combinator孵化的创业团队开源出来的一款可以用于iOS(同样适用于Swift&Objective-C)和Android的跨平台移动数据库。目前最新版是Realm 2.0.2,支持的平台包括Java,Objective-C,Swift,React Native,Xamarin。
Realm官网上说了好多优点,我觉得选用Realm的最吸引人的优点就三点:
跨平台:现在很多应用都是要兼顾iOS和Android两个平台同时开发。如果两个平台都能使用相同的数据库,那就不用考虑内部数据的架构不同,使用Realm提供的API,可以使数据持久化层在两个平台上无差异化的转换。
简单易用:Core Data 和 SQLite 冗余、繁杂的知识和代码足以吓退绝大多数刚入门的开发者,而换用 Realm,则可以极大地减少学习成本,立即学会本地化存储的方法。毫不吹嘘的说,把官方最新文档完整看一遍,就完全可以上手开发了。
可视化:Realm 还提供了一个轻量级的数据库查看工具,在Mac Appstore 可以下载“Realm Browser”这个工具,开发者可以查看数据库当中的内容,执行简单的插入和删除数据的操作。毕竟,很多时候,开发者使用数据库的理由是因为要提供一些所谓的“知识库”。
MBProgressHUD和SVProgressHUD各自都有缺点:
当A页面进入B页面,B页面查询数据时,报错需要弹出toast弹窗,并退出B页面到A页面。一般toast弹窗是现实在keywindow上的,但是kewindow是B页面,而由于自动返回A页面,B页面销毁了,就看不到这个toast弹窗了。使用MBProgressHUD时就会遇到该问题。有的app为了解决这个问题人为延迟推出B页面,这样降低用户的体验流畅度,不完美。
另一种采用SVProgressHUD来实现,它是异步时弹窗,显示调用弹窗和实际显示弹窗有一个时间差,正好在B页面调用弹窗,在回到A页面时,弹窗出来,所以能显示出来。我们遇到过一个问题,一个请求后台在十几毫秒内返回,蒙层弹窗还没有出来请求回来了,并且取消弹窗,实际上SVProgressHUD还没有出来,导致后面没有取消处理了,一直在哪里转圈了。
最佳解决方案是创建一个优先级高于当前级别的window显示蒙层和动画。