[swift]swift4.0 CoreData的使用

    • CoreData基礎
      在CoreData中有一些常用的類,稱呼可能各不相同。
      NSPersistentStoreCoordinator(Persistent Store Coordinator),縮寫為PSC。
      NSManagedObjectContext(Managed Object Context),縮寫為MOC。
      NSManagedObjectModel(Managed Object Model),縮寫為MOM。
      NSManagedObject及其子類,根據(jù)英文翻譯和其作用,稱之為托管對象。
      后綴名為.xcdatamodeld的文件,因為存儲著所有實體的數(shù)據(jù)結(jié)構(gòu)和表示,所以稱之為模型文件。

CoreData是蘋果推出的一個數(shù)據(jù)存儲框架。CoreData提供了一種對象關系映射(ORM)的存儲關系,類似于Javahibernate框架。CoreData可以將OC對象存儲到數(shù)據(jù)庫中,也可以將數(shù)據(jù)庫中的數(shù)據(jù)轉(zhuǎn)化為OC對象,在這個過程中不需要手動編寫任何SQL語句,這是系統(tǒng)幫我們完成

CoreData最大的優(yōu)勢就是使用過程中不需要編寫任何SQL語句,CoreData封裝了數(shù)據(jù)庫的操作過程,以及數(shù)據(jù)庫中數(shù)據(jù)和OC對象的轉(zhuǎn)換過程。所以在使用CoreData的過程中,很多操作就像是對數(shù)據(jù)庫進行操作一樣,也有過濾條件、排序等操作。
這就相當于CoreData完成了Model層的大量工作,例如Model層的表示和持久化,有效的減少了開發(fā)的工作量,使Model層的設計更加面向?qū)ο蟆?/p>

CoreData主要的幾個類

NSManagedObjectContext
托管對象上下文,進行數(shù)據(jù)操作時大多都是和這個類打交道。
NSManagedObjectModel
托管對象模型,一個托管對象模型關聯(lián)一個模型文件(.xcdatamodeld),存儲著數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)。
NSPersistentStoreCoordinator
持久化存儲協(xié)調(diào)器,負責協(xié)調(diào)存儲區(qū)和上下文之間的關系。
NSManagedObject
托管對象類,所有CoreData中的托管對象都必須繼承自當前類,根據(jù)實體創(chuàng)建托管對象類文件。

CoreData簡單創(chuàng)建流程
1.模型文件操作

1.1 創(chuàng)建模型文件,后綴名為.xcdatamodeld。創(chuàng)建模型文件之后,可以在其內(nèi)部進行添加實體等操作(用于表示數(shù)據(jù)庫文件的數(shù)據(jù)結(jié)構(gòu))
1.2 添加實體(表示數(shù)據(jù)庫文件中的表結(jié)構(gòu)),添加實體后需要通過實體,來創(chuàng)建托管對象類文件。
1.3 添加屬性并設置類型,可以在屬性的右側(cè)面板中設置默認值等選項。(每種數(shù)據(jù)類型設置選項是不同的)
1.4 創(chuàng)建獲取請求模板、設置配置模板等。
1.5 根據(jù)指定實體,創(chuàng)建托管對象類文件(基于NSManagedObject的類文件)

2.實例化上下文對象

2.1 創(chuàng)建托管對象上下文(NSManagedObjectContext)
2.2 創(chuàng)建托管對象模型(NSManagedObjectModel)
2.3 根據(jù)托管對象模型,創(chuàng)建持久化存儲協(xié)調(diào)器(NSPersistentStoreCoordinator)
2.4 關聯(lián)并創(chuàng)建本地數(shù)據(jù)庫文件,并返回持久化存儲對象(NSPersistentStore)
2.5 將持久化存儲協(xié)調(diào)器賦值給托管對象上下文,完成基本創(chuàng)建。

下邊一張圖概括coreData之間的關系:

CoreData結(jié)構(gòu)圖

從圖中可以看出,這兩部分都是比較獨立的,兩部分的交互由一個持久化存儲調(diào)度器(NSPersistentStreCoordinator)來控制。上層NSManagedObjectContext存儲的數(shù)據(jù)都是交給持久化調(diào)度器,由調(diào)度器調(diào)用具體的持久化存儲對象(NSPersistentStore)來操作對應的數(shù)據(jù)庫文件,NSPersistentStore負責存儲的實現(xiàn)細節(jié)。這樣就很好的將兩部分實現(xiàn)了分離。

CoreData本質(zhì)還是使用SQLite進行存儲,并沒有另外提供加密功能,具體的數(shù)據(jù)加解密還需要自己完成。

之前聽其他人說CoreData的執(zhí)行效率不如SQLite高,這個如果深究的話,確實CoreData要比SQLite效率差一些,只不過并沒有太大區(qū)別。CoreData本質(zhì)也是在底層執(zhí)行SQL語句,只是CoreDataSQL語句執(zhí)行邏輯比較耗時,沒有手動編寫SQL語句更加直接。我們可以將CoreData的調(diào)試功能打開,具體看一下SQL語句的執(zhí)行。

客戶端畢竟不是服務端,不需要像服務器那樣大量的數(shù)據(jù)查詢,所以CoreData是完全可以應對客戶端的查詢量的。如果從靈活性來說,CoreData確實沒有SQLite的靈活性高,一些SQLite的復雜功能可能也不能實現(xiàn),但是就目前大多數(shù)項目來說,CoreData已經(jīng)能夠滿足項目持久化需求了。

導致執(zhí)行效率差異的原因還體現(xiàn)在對象轉(zhuǎn)換上,CoreData在執(zhí)行SQL語句的基礎上,還多了一層將數(shù)據(jù)映射給托管對象的操作,這樣得到的就是OC的托管對象,而SQLite得到的則不是。如果給SQLite執(zhí)行完成后,也加一層創(chuàng)建托管對象并賦值的操作,這時候?qū)Ρ刃阅軆烧叩牟罹嗫赡芫蜁×?/p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容