很多人都知道CoreData是ios开发数据持久化方式的一种,很多时候别人都会问到,包括项目中也会使用到。但是很多人却不知道里面的实现原理。现在我来将我所理解的CoreData和大家分享下,有不对的地方欢迎大家指正和交流。
一、CoreData介绍
CoreData是iOS5之后新出来的的一个框架, 是对SQLite进行一层封装升级后的一种数据持久化方式。它提供了对象关系映射的功能,即能够将OC对象转化为数据存储到SQLite数据库文件中,同时也能将数据库中的数据还原成OC对象。相较于SQLite,我们使用CoreData就不需要再编写任何SQL语句,再也不去纠结SQL语句怎么写了,这是一个优点。
二、CoreData核心结构图
使用CoreData,首先要理解这几个用到的对象的意义:
PersistentObjectStore:存储持久对象的数据库(例如SQLite,注意CoreData也支持其他类型的数据存储,例如xml、二进制数据等)。
ManagedObjectModel:对象模型,对应Xcode中创建的模型文件。
PersistentStoreCoordinator:对象模型和实体类之间的转换协调器,用于管理不同存储对象的上下文。
ManagedObjectContext:对象管理上下文,负责实体对象和数据库之间的交互。
看看下面这张图,你大概就能明白它的意思了:
图中的模型就是ManagedObjectModel,就是数据转化为对象的模板;
以SQLite数据库为例:
读取数据库的数据时,数据库数据先进入数据解析器,根据对应的模板,生成对应的关联对象。
向数据库插入数据时,对象管理器先根据实体描述创建一个空对象,对该对象进行初始化,然后经过数据解析器,根据对应的模板,转化为数据库的数据,插入数据库中。
更新数据库数据时,对象管理器需要先读取数据库的数据,拿到相互关联的对象,对该对象进行修改,修改的数据通过数据解析器,转化为数据库的更新数据,对数据库更新。
当然这些逻辑还是要在使用中进行加深理解。
我本人写了一个使用CoreData的demo,实现对数据的增删改查,gitHub地址:https://github.com/SirJunqiuWu/DemoOfCoreData.git 欢迎大家关注。