用Realm替换CoreData/SQLite的理由

Realm,大概你多多少少知道一些。它是一个移动设备上跨平台的高效数据库,这货的意图是替代CoreData和SQLite。这口气似乎有些大,不过它似乎正在印证这个吹嘘!因为它真的很高效!比起CoreData和SQLite都有盈余。
如果你的项目当中已经使用了CoreData或者SQLite。这里有5个理由,或许可以让你投入到Realm的怀抱!

简单易用

CoreData使用起来真心让人蛋疼,不知道你是不是也这样认为!当然,CoreData是一个牛逼的工具,但是它的使用便利性、可维护性基本为零!当然,也不是说Realm就绝壁好用!不过对于Objective-C (Swift)风格的类(class)与属性(properties),简单的继承RLMObject去创建一个数据模型对象你可能会喜欢!

#import <Realm/Realm.h>

@interface Person : RLMObject

@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) NSInteger age;
@property (nonatomic, strong) NSString *gender;
@property (nonatomic, strong) NSString *birthPlace;
@property (nonatomic, strong) NSData *birthDate;
@property (nonatomic, weak) BOOL married;

@end`</pre>
</div>
你可以像操作普通对象一样操作Realm对象!如果需要在不同的线程、或者不同的界面使用或者重用Realm,那么你可以从Realm当中去检索数据!所有的Realm对象操作都会使用事务的方式来操作完成(新建、删除、更新等操作)!
<div>
<pre>`// 创建一个对象,并保存!
Person *p = [[Person alloc] init];
p.name = @"Jack";
p.age = 23;
p.gender = @"male";
p.birthPlace = @"Shanghai, China";
p.birthDate = [NSDate dateWithTimeIntervalSince1970:1522045010];
p.married = YES;

RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
[realm addObject:p];
[realm commitWriteTransaction];`</pre>
</div>
检索查询已经保存的Realm对象,可以使用`[RLMObject allObject]`,这个方法可以返回所有的Realm对象!并且,我们可以使用已经定义的类来接受它!
<div>
<pre>`RLMArray *allPersons = [Person allObjectsInRealm : realm];
NSLog(@"All Persons: %@", allPersons);
Realm,就是这么简单!无需复杂的对象管理器NSManagedObjects, 无需蛋疼的持久化存储调度NSPersistentStoreCoordinators等……就是这么粗暴!

速度高效

没图没真相!口说无凭!不如上张图来对比一下Realm、SQLite、FMDB、CoreData、Couchbase Lite!

速度对比图

150000条数据的数据,用各种不同的方案检索,每秒执行的次数如上!请自行理解!

自带数据浏览器

我们知道SQLite是一个很牛逼的数据库系统,它的管理工具自然数不胜数!而CoreData在Xcode自带编辑器。这两个还是相当牛逼的!不过,不用着急!大Realm也有的!对象模型、数据条目一目了然!

数据浏览器

而且这货,是自带编辑功能的呢!

跨平台

除了iOS,Realm还支持android,连最近特火的React Native都支持了,你能想象在不同的平台下使用同一套数据模型带来的快感!

免费!文档齐全!以及更多牛逼的特性……

目前Realm是免费的,它有十分健全的文档!甚至包括中文的。在众多牛逼coder的努力劳作下,Realm变得越来越牛逼!全世界都有很多人在使用,所以你能遇到的很多问题,Google一下都能找到答案!

怎么样,赶紧燥起来吧!