最近公司项目用到Core Data,觉得自己这方面很弱,就结合了《Core Data应用实践指南》这本书,记下一下Core Data入门的一些基本知识。
1.Core Data基本概念
Core Data概览图中托管对象-managed object是由Core Data提供的数据对象,而Core Data本身则位于app和持久化存储区-persistent store之间,一般我们使用SQLite数据库作为persistent store,当然还有XML文件也可以,但是iOS中并不支持这种格式。
要想将managed object映射到persistent store,还需要使用托管对象模型-managed object model,作为开发者,我们需要完善对象图-object graph,这个东西很熟悉,就是Xcode中生成的那一张表格类似的东西,书中称其为饼干模型切割刀,十分形象,managed object就是这么切出来的。
还有一个托管对象上下文-managed object context,所有的managed object都必须位于context中,关于context的设计也十分的有意思,位于RAM中,原因就是磁盘的读写速度比RAM慢了很多,这样的话如果每次访问数据,就会有很大的开销,现在只需要访问context,就能很快速的得到数据,很方便。而缺点则是,一旦有了数据的更改,就必须调用context的save方法,讲变更的数据写回磁盘,不过两相比较,瑕不掩瑜吧。
同时还有一点关于managed object context,由于调用save保存数据时候,容易造成界面卡顿,这种情况下可以采用多个context,这个时候书中提出了两个解决的方法,一个是当用户按下home键时候,程序进入后台的时候进行save调用,另一种方法是采用两个context,配置其父子关系,子上下文将父上下文当作自己的persistent store,将数据存入到父context中,这时父context将异步的存入磁盘,这个方法有些复杂,并未使用过,如果数据量小的话直接使用第一种就好。
persistent store coordinator中含有一份persistent store,顾名思义它就是协调数据存储到持久化存储区中的一个类。同一个persistent store coordinator可以协调多个persistent store,举个例子吧,Core Data与iCloud相集成的时候,就会出现这种情况,把属于iCloud和不属于iCloud的数据分别放到两个存储区里,使用两个persistent store,却采用同一个object graph。
但是我觉得书中配图并不是很直观,在http://objccn.io/issue-4-1/ 中作者用了另一张图,是官方文档中的
这张图中并没有managed object model,我觉得只有在最开始初始化的时候会用到managed object model来生成managed object,但是在程序运行中我们接触更多的还是数据的改变与存储,对应的则是上图,所以也贴上来吧
这是关于Core Data的一些基本的概念,可能比较粗糙,后面还会写一写代码类的,我觉得Core Data的基本使用还是很简单的,初始化这些类以后,写好增删改查的方法既能够应对最基本的需求了,但是Core Data的博大精深并不止于此,后面再继续慢慢探究吧。
网友评论