在開發(fā)iOS移動端的過程中,難免會涉及到使用數(shù)據(jù)庫的情況,那么在iOS開發(fā)的過程中,我們應(yīng)該選擇哪種數(shù)據(jù)庫作為應(yīng)用的選擇呢?下面我們來分析下iOS應(yīng)用中經(jīng)常用到的四款數(shù)據(jù)庫 WCDB、Realm和FMDB
1.簡介
WCDB
WCDB 是騰訊開源的一個高效、完整、易用的移動數(shù)據(jù)庫框架,基于SQLCipher,支持 iOS、macOS 和 Android。
Realm
Realm 是一個移動數(shù)據(jù)庫,可運(yùn)行于手機(jī)、平板和可穿戴設(shè)備之上??梢宰屇愕膽?yīng)用更快速,帶來難以想象的體驗(yàn)。其目標(biāo)是為了代替 CoreData 和 SQLite 數(shù)據(jù)庫,支持 iOS/OS X/Android 平臺,提供 Swift/Objective-C/Java 語言
FMDB
FMDB是iOS平臺的SQLite數(shù)據(jù)庫框架。FMDB以O(shè)C的方式封裝了SQLite的C語言API。
2.優(yōu)缺點(diǎn)
WCDB
優(yōu)點(diǎn):
1. 代碼輕便:代碼量基本等于Realm,都是SQLite的一半。
2. 風(fēng)格好開發(fā)效率高:風(fēng)格接近于OC、Swift原本的風(fēng)格,結(jié)合代碼提示及糾錯,極大地提高了開發(fā)效率。
缺點(diǎn):
1.相關(guān)資料過少,環(huán)境配置需要花時間
Realm
優(yōu)點(diǎn):
1.跨平臺:(可以在 iOS 和 Android 平臺上共同使用),上手比較簡單易用,文檔比較完善;
2.可視化:Realm還提供了一個輕量級的數(shù)據(jù)庫查看工具,在Mac Appstore 可以下載這個工具,開發(fā)者可以查看數(shù)據(jù)庫當(dāng)中的內(nèi)容,執(zhí)行簡單的插入和刪除數(shù)據(jù)的操作。
3.輕量級: 一般來說Realm比SQLite在硬盤上占用的空間更少
4.查詢操作簡單:一行代碼根據(jù)查詢目的來獲取查詢結(jié)果的數(shù)組。
5.數(shù)據(jù)庫變更方便,Realm會自行監(jiān)測新增加和需要移除的屬性,然后更新硬盤上的數(shù)據(jù)庫架構(gòu),Realm可以配置數(shù)據(jù)庫版本,進(jìn)行判斷。
缺點(diǎn):
1.基類只能繼承自RLMObject ,不能自由繼承;。
2.多線程訪問時需要新建新的Realm對象,崩潰頻發(fā);
3.Realm沒有自增屬性。
4.Realm屬性類型少,不支持集合類型。
FMDB
優(yōu)點(diǎn):
1.它基于SQLite封裝,對于有SQLite和ObjC基礎(chǔ)的開發(fā)者來說
2.簡單易懂,可以直接上手;
缺點(diǎn):
1.FMDB只是將SQLite的C接口封裝成了ObjC接口,沒有做太多別的優(yōu) 化,即所謂的膠水代碼(Glue Code)。
2.使用過程需要用大量的代碼拼接SQL、拼裝Object,并不方便。
3.容易通過SQL代碼注入。
4.直接暴露字符串接口,讓業(yè)務(wù)開發(fā)自己拼接字符串,取出數(shù)據(jù)后賦值給對應(yīng)的Object. 這種方式過于簡單粗暴。
3.性能測試
以下是性能測試的圖表結(jié)果:

數(shù)據(jù)庫耗時性能測試.png

數(shù)據(jù)庫操作次數(shù)性能測試.png