很多人都知道CoreData是ios開發(fā)數(shù)據(jù)持久化方式的一種,很多時候別人都會問到迄靠,包括項目中也會使用到。但是很多人卻不知道里面的實現(xiàn)原理。現(xiàn)在我來將我所理解的CoreData和大家分享下晚碾,有不對的地方歡迎大家指正和交流。
一喂急、CoreData介紹
? ? ? ?CoreData是iOS5之后新出來的的一個框架, 是對SQLite進行一層封裝升級后的一種數(shù)據(jù)持久化方式格嘁。它提供了對象關(guān)系映射的功能,即能夠?qū)C對象轉(zhuǎn)化為數(shù)據(jù)存儲到SQLite數(shù)據(jù)庫文件中廊移,同時也能將數(shù)據(jù)庫中的數(shù)據(jù)還原成OC對象糕簿。相較于SQLite探入,我們使用CoreData就不需要再編寫任何SQL語句,再也不去糾結(jié)SQL語句怎么寫了,這是一個優(yōu)點懂诗。
二蜂嗽、CoreData核心結(jié)構(gòu)圖
? ? ? ? 使用CoreData,首先要理解這幾個用到的對象的意義:
? ? ? ? PersistentObjectStore:存儲持久對象的數(shù)據(jù)庫(例如SQLite,注意CoreData也支持其他類型的數(shù)據(jù)存儲殃恒,例如xml徒爹、二進制數(shù)據(jù)等)。
? ? ? ? ?ManagedObjectModel:對象模型芋类,對應(yīng)Xcode中創(chuàng)建的模型文件隆嗅。
? ? ? ? PersistentStoreCoordinator:對象模型和實體類之間的轉(zhuǎn)換協(xié)調(diào)器,用于管理不同存儲對象的上下文侯繁。
? ? ? ?ManagedObjectContext:對象管理上下文胖喳,負(fù)責(zé)實體對象和數(shù)據(jù)庫之間的交互。
? ? ? 看看下面這張圖贮竟,你大概就能明白它的意思了:
圖中的模型就是ManagedObjectModel,就是數(shù)據(jù)轉(zhuǎn)化為對象的模板;
以SQLite數(shù)據(jù)庫為例:
讀取數(shù)據(jù)庫的數(shù)據(jù)時咕别,數(shù)據(jù)庫數(shù)據(jù)先進入數(shù)據(jù)解析器技健,根據(jù)對應(yīng)的模板,生成對應(yīng)的關(guān)聯(lián)對象惰拱。
向數(shù)據(jù)庫插入數(shù)據(jù)時雌贱,對象管理器先根據(jù)實體描述創(chuàng)建一個空對象,對該對象進行初始化偿短,然后經(jīng)過數(shù)據(jù)解析器欣孤,根據(jù)對應(yīng)的模板,轉(zhuǎn)化為數(shù)據(jù)庫的數(shù)據(jù)昔逗,插入數(shù)據(jù)庫中降传。
更新數(shù)據(jù)庫數(shù)據(jù)時,對象管理器需要先讀取數(shù)據(jù)庫的數(shù)據(jù)勾怒,拿到相互關(guān)聯(lián)的對象婆排,對該對象進行修改,修改的數(shù)據(jù)通過數(shù)據(jù)解析器笔链,轉(zhuǎn)化為數(shù)據(jù)庫的更新數(shù)據(jù)段只,對數(shù)據(jù)庫更新。
當(dāng)然這些邏輯還是要在使用中進行加深理解卡乾。
我本人寫了一個使用CoreData的demo,實現(xiàn)對數(shù)據(jù)的增刪改查,gitHub地址:https://github.com/SirJunqiuWu/DemoOfCoreData.git ? 歡迎大家關(guān)注翼悴。