[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ù)結構和表示屈芜,所以稱之為模型文件郊愧。

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

CoreData最大的優(yōu)勢就是使用過程中不需要編寫任何SQL語句,CoreData封裝了數(shù)據(jù)庫的操作過程盒发,以及數(shù)據(jù)庫中數(shù)據(jù)和OC對象的轉換過程喇肋。所以在使用CoreData的過程中,很多操作就像是對數(shù)據(jù)庫進行操作一樣迹辐,也有過濾條件、排序等操作甚侣。
這就相當于CoreData完成了Model層的大量工作明吩,例如Model層的表示和持久化,有效的減少了開發(fā)的工作量殷费,使Model層的設計更加面向對象印荔。

CoreData主要的幾個類

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

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

1.1 創(chuàng)建模型文件蟹漓,后綴名為.xcdatamodeld炕横。創(chuàng)建模型文件之后,可以在其內部進行添加實體等操作(用于表示數(shù)據(jù)庫文件的數(shù)據(jù)結構)
1.2 添加實體(表示數(shù)據(jù)庫文件中的表結構)葡粒,添加實體后需要通過實體份殿,來創(chuàng)建托管對象類文件膜钓。
1.3 添加屬性并設置類型,可以在屬性的右側面板中設置默認值等選項卿嘲。(每種數(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é)調器(NSPersistentStoreCoordinator)
2.4 關聯(lián)并創(chuàng)建本地數(shù)據(jù)庫文件,并返回持久化存儲對象(NSPersistentStore)
2.5 將持久化存儲協(xié)調器賦值給托管對象上下文放前,完成基本創(chuàng)建忿磅。

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

CoreData結構圖

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

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

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

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

導致執(zhí)行效率差異的原因還體現(xiàn)在對象轉換上,CoreData在執(zhí)行SQL語句的基礎上获茬,還多了一層將數(shù)據(jù)映射給托管對象的操作港庄,這樣得到的就是OC的托管對象倔既,而SQLite得到的則不是。如果給SQLite執(zhí)行完成后鹏氧,也加一層創(chuàng)建托管對象并賦值的操作渤涌,這時候對比性能兩者的差距可能就會更小了

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市把还,隨后出現(xiàn)的幾起案子实蓬,更是在濱河造成了極大的恐慌,老刑警劉巖吊履,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件安皱,死亡現(xiàn)場離奇詭異,居然都是意外死亡艇炎,警方通過查閱死者的電腦和手機酌伊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缀踪,“玉大人居砖,你說我怎么就攤上這事÷客蓿” “怎么了奏候?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長唇敞。 經常有香客問我蔗草,道長,這世上最難降的妖魔是什么厚棵? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蔼紧,結果婚禮上婆硬,老公的妹妹穿的比我還像新娘。我一直安慰自己奸例,他們只是感情好彬犯,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著查吊,像睡著了一般谐区。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逻卖,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天宋列,我揣著相機與錄音,去河邊找鬼评也。 笑死炼杖,一個胖子當著我的面吹牛灭返,可吹牛的內容都是我干的。 我是一名探鬼主播坤邪,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼熙含,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了艇纺?” 一聲冷哼從身側響起怎静,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎黔衡,沒想到半個月后蚓聘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡员帮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年或粮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捞高。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡氯材,死狀恐怖,靈堂內的尸體忽然破棺而出硝岗,到底是詐尸還是另有隱情氢哮,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布型檀,位于F島的核電站冗尤,受9級特大地震影響,放射性物質發(fā)生泄漏胀溺。R本人自食惡果不足惜裂七,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仓坞。 院中可真熱鬧背零,春花似錦、人聲如沸无埃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嫉称。三九已至侦镇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間织阅,已是汗流浹背壳繁。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人氮趋。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓伍派,卻偏偏與公主長得像,于是被迫代替她去往敵國和親剩胁。 傳聞我的和親對象是個殘疾皇子诉植,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內容