Realm or FMDB?

缓存数据是iOS开发中常遇到的问题,选择一个好的缓存框架能省不少的事情。
我目前使用的是CoreData+ObjectiveRecord,比起直接使用CoreData和MagicalRecord省事了不少,然而问题还是存在,且比较棘手。

  1. 持有对象的快速初始化

@interface ZXPersonalDynamic : NSManagedObject

/**
 *  用户
 */
@property (nullable, nonatomic, retain) ZXManagedUser *user;

@end

比如这样一个实体,在快速初始化ZXPersonalDynamic的时候ZXManagedUser就无法直接初始化(没有人写我自己也不会写),尽管有+ (id)create:(NSDictionary *)attributes- (void)update:(NSDictionary *)attributes这类的方法。

  1. 缓存实体和无需缓存实体之间的切换麻烦
    还是上面的例子,本来ZXPersonalDynamic里是没有user这个对象的,所以我使用了继承于NSObjectZXUser这个实体。后来因为需求更改,里面需要一个user对象了,而且必须继承自NSManagedObject。把ZXUser的父类改成NSManagedObject?不行,因为很多其他地方都用到了这个,而且他们的构造方法什么的都不一样。所以我最后很恶心的建了一个里面属性一毛一样的ZXManagedUser

  2. 需要缓存的场景跟不需要缓存的场景的使用
    还是上面的例子,ZXPersonalDynamic这个动态的实体,在时间线和个人动态里是需要缓存的,在热门动态这个tableview里是不需要缓存的。我曾经天真的以为我不save就不会存下来,结果在取缓存数据的时候仍然被筛选出来了,最后无奈的加了个isTemp属性来区分是不是缓存的数据。

暂时就想到这么多,我想要问的是:

  1. 对于Realm,我做过一些了解,确实比CoreData友好的多,但是Realm也是需要继承RLMObject的,它能解决上面的问题吗?

  2. 对于FMDB,无疑它是能够统一Model的类型的,但是它的建表存值什么的太啰嗦了,而且sql里的string都是hard code,无法在编译的时候查出拼写错误之类,有没有对它封装的更好的一些库或者Helper呢?

我先把问题抛出来,得到答案之后,我再来更新这篇文章

1.21更新

经过测试Realm确实能解决上面这三个问题。
所以,在没有各种特殊要求的时候,realm确实能满足持久化的需要了。拥抱realm吧!

你可能感兴趣的:(Realm or FMDB?)