緩存數(shù)據(jù)是iOS開發(fā)中常遇到的問題藐唠,選擇一個好的緩存框架能省不少的事情跨算。
我目前使用的是CoreData+ObjectiveRecord,比起直接使用CoreData和MagicalRecord省事了不少咙冗,然而問題還是存在,且比較棘手漂彤。
- 持有對象的快速初始化
@interface ZXPersonalDynamic : NSManagedObject
/**
* 用戶
*/
@property (nullable, nonatomic, retain) ZXManagedUser *user;
@end
比如這樣一個實體雾消,在快速初始化ZXPersonalDynamic
的時候ZXManagedUser就無法直接初始化(沒有人寫我自己也不會寫),盡管有+ (id)create:(NSDictionary *)attributes
和- (void)update:(NSDictionary *)attributes
這類的方法挫望。
緩存實體和無需緩存實體之間的切換麻煩
還是上面的例子立润,本來ZXPersonalDynamic
里是沒有user
這個對象的,所以我使用了繼承于NSObject
的ZXUser
這個實體媳板。后來因為需求更改桑腮,里面需要一個user
對象了,而且必須繼承自NSManagedObject
蛉幸。把ZXUser
的父類改成NSManagedObject
破讨?不行,因為很多其他地方都用到了這個奕纫,而且他們的構(gòu)造方法什么的都不一樣提陶。所以我最后很惡心的建了一個里面屬性一毛一樣的ZXManagedUser
。需要緩存的場景跟不需要緩存的場景的使用
還是上面的例子匹层,ZXPersonalDynamic
這個動態(tài)的實體隙笆,在時間線和個人動態(tài)里是需要緩存的,在熱門動態(tài)這個tableview里是不需要緩存的升筏。我曾經(jīng)天真的以為我不save就不會存下來撑柔,結(jié)果在取緩存數(shù)據(jù)的時候仍然被篩選出來了,最后無奈的加了個isTemp屬性來區(qū)分是不是緩存的數(shù)據(jù)您访。
暫時就想到這么多铅忿,我想要問的是:
對于Realm,我做過一些了解灵汪,確實比CoreData友好的多檀训,但是Realm也是需要繼承
RLMObject
的,它能解決上面的問題嗎识虚?對于FMDB,無疑它是能夠統(tǒng)一Model的類型的肢扯,但是它的建表存值什么的太啰嗦了妒茬,而且sql里的string都是hard code担锤,無法在編譯的時候查出拼寫錯誤之類,有沒有對它封裝的更好的一些庫或者Helper呢乍钻?
我先把問題拋出來肛循,得到答案之后铭腕,我再來更新這篇文章
1.21更新
經(jīng)過測試Realm確實能解決上面這三個問題。
所以多糠,在沒有各種特殊要求的時候累舷,realm確實能滿足持久化的需要了。擁抱realm吧夹孔!