很多人都知道CoreData是ios開發(fā)數(shù)據(jù)持久化方式的一種,很多時(shí)候別人都會(huì)問到,包括項(xiàng)目中也會(huì)使用到。但是很多人卻不知道里面的實(shí)現(xiàn)原理?,F(xiàn)在我來將我所理解的CoreData和大家分享下,有不對(duì)的地方歡迎大家指正和交流。
一、CoreData介紹
? ? ? ?CoreData是iOS5之后新出來的的一個(gè)框架, 是對(duì)SQLite進(jìn)行一層封裝升級(jí)后的一種數(shù)據(jù)持久化方式。它提供了對(duì)象關(guān)系映射的功能,即能夠?qū)C對(duì)象轉(zhuǎn)化為數(shù)據(jù)存儲(chǔ)到SQLite數(shù)據(jù)庫文件中,同時(shí)也能將數(shù)據(jù)庫中的數(shù)據(jù)還原成OC對(duì)象。相較于SQLite,我們使用CoreData就不需要再編寫任何SQL語句,再也不去糾結(jié)SQL語句怎么寫了,這是一個(gè)優(yōu)點(diǎn)。
二、CoreData核心結(jié)構(gòu)圖

? ? ? ? 使用CoreData,首先要理解這幾個(gè)用到的對(duì)象的意義:
? ? ? ? PersistentObjectStore:存儲(chǔ)持久對(duì)象的數(shù)據(jù)庫(例如SQLite,注意CoreData也支持其他類型的數(shù)據(jù)存儲(chǔ),例如xml、二進(jìn)制數(shù)據(jù)等)。
? ? ? ? ?ManagedObjectModel:對(duì)象模型,對(duì)應(yīng)Xcode中創(chuàng)建的模型文件。
? ? ? ? PersistentStoreCoordinator:對(duì)象模型和實(shí)體類之間的轉(zhuǎn)換協(xié)調(diào)器,用于管理不同存儲(chǔ)對(duì)象的上下文。
? ? ? ?ManagedObjectContext:對(duì)象管理上下文,負(fù)責(zé)實(shí)體對(duì)象和數(shù)據(jù)庫之間的交互。
? ? ? 看看下面這張圖,你大概就能明白它的意思了:

圖中的模型就是ManagedObjectModel,就是數(shù)據(jù)轉(zhuǎn)化為對(duì)象的模板;
以SQLite數(shù)據(jù)庫為例:
讀取數(shù)據(jù)庫的數(shù)據(jù)時(shí),數(shù)據(jù)庫數(shù)據(jù)先進(jìn)入數(shù)據(jù)解析器,根據(jù)對(duì)應(yīng)的模板,生成對(duì)應(yīng)的關(guān)聯(lián)對(duì)象。
向數(shù)據(jù)庫插入數(shù)據(jù)時(shí),對(duì)象管理器先根據(jù)實(shí)體描述創(chuàng)建一個(gè)空對(duì)象,對(duì)該對(duì)象進(jìn)行初始化,然后經(jīng)過數(shù)據(jù)解析器,根據(jù)對(duì)應(yīng)的模板,轉(zhuǎn)化為數(shù)據(jù)庫的數(shù)據(jù),插入數(shù)據(jù)庫中。
更新數(shù)據(jù)庫數(shù)據(jù)時(shí),對(duì)象管理器需要先讀取數(shù)據(jù)庫的數(shù)據(jù),拿到相互關(guān)聯(lián)的對(duì)象,對(duì)該對(duì)象進(jìn)行修改,修改的數(shù)據(jù)通過數(shù)據(jù)解析器,轉(zhuǎn)化為數(shù)據(jù)庫的更新數(shù)據(jù),對(duì)數(shù)據(jù)庫更新。
當(dāng)然這些邏輯還是要在使用中進(jìn)行加深理解。
我本人寫了一個(gè)使用CoreData的demo,實(shí)現(xiàn)對(duì)數(shù)據(jù)的增刪改查,gitHub地址:https://github.com/SirJunqiuWu/DemoOfCoreData.git ? 歡迎大家關(guān)注。