什么是CoreData?

原文程序员

简介

Core Data是个框架(并非数据库哦),它使开发者能够把数据当作对象来操做,而没必要在意数据在磁盘中的存储方式。对于iOS程序员来讲,这颇有用,由于咱们已经能够经过代码很是熟悉的操做对象了。由Core Data 所提供的数据对象叫作托管对象(Managed Object),而Core Data自己则位于你的应用程序和持久化存储区(Persistent store)之间。为了把数据从托管对象映射到持久化存储区中,Core Data 须要使用托管对象模型。全部的托管对象都必须位于托管对象上下文(Managed object context)里面,而托管对象上下文又位于高速的易失性存储器里面,也就是位于RAM中。数据库

为何须要有托管对象上下文呢?缘由之一就是在磁盘与RAM之间传输数据时会有开销。磁盘读写速度比RAM慢的多,因此不该该频繁地访问它。有了托管对象上下文,就能够很是迅速地获取到了。但它的缺点在于,开发者必须在托管对象上下文上面按期调用save方法,以将变动后的数据写回磁盘。托管对象上下文的另外一个功能是记录开发者对托管对象所对的修改,以提供完整的撤销和重作支持。网络

上边咱们对Core Data简单的介绍了一下。接下来咱们须要对CoreData中的重要的名词作一解释。数据结构

持久化存储协调器

持久化存储协调器(persistent store coordinator)里面包含一份持久化存储区,而存储区里面又含有数据表里面的若干行数据。设置持久化存储协调器的时候,咱们一般选用SQLite数据库做为持久化存储区。另外,也能够选用Binary、XML、或In-Memory等形式的持久化存储区。但要注意的是,Binary和XML格式的存储区是Atomic,也就是说,即使你只想修改少许的数据,在保存的时候也依然须要把整个文件都写入磁盘。框架

同一个持久化存储协调器能够有多个持久化存储区。把CoreDataiCloud相集成的时候,就可能会出现这样的状况。咱们能够把不属于iCloud的数据放在一个存储区里面,而把属于iCloud的数据放在另一个存储区里面,这样既能节省网络宽带,又能节省iCloud存储空间。异步

即使你有两个持久化存储区,也不意味着必须使用两种对象图。CoreData的模型配置容许开发者使用多个独立的存储区,但却采用同一套对象图。在设置CoreData的模型配置选项时,能够指明对象图里面的某一部分属于哪个持久化存储区.net

要想建立持久化存储区,需生成NSPersistentStore;要想建立持久化存储协调器,需生成NSPersistentStoreCoordinator类的实例。code

托管对象模型

托管对象模型它位于持久化存储协调器托管对象上下文直间。顾名思议,托管对象模型是描述数据结构的模型或者图示,而托管对象正是以它为基础产生出来的。能够用Xcode来配置实体(Entity)及实体之间的关系。实体自己并不包含数据,它们只是规定了基于该实体的托管对象具备何种特性。实体也有属性,属性的数据类型能够是整数,字符串,或者日期等。对象

要想建立托管对象模型,须要生成NSManagedObjectModel类的实例。内存

托管对象上下文

托管对象上下文中可包含多个托管对象。托管对象上下文负责管理其中对象的生命期,而且负责提供许多强大的功能。

托管对象上下文也能够不止有一个,有时咱们须要在后台处理任务(比方说把数据保存到磁盘或者导入数据),这种状况下能够采用多个上下文。加入在前台上下文上面调用Save,那么用户界面就可能会有卡顿现象,尤为当数据变化较大的时候更是如此。要想避免这个问题,有个简单的办法就是只在用户按下手机的Home键时才去调用Save,这时应用程序会转入到后台。还有个稍微复杂的但却很灵活的办法,就是采起两个托管对象上下文。请记住,托管对象上下文是存放在高速内存里面的。你能够配置其中一个上下文,那么就能够将后台上下文种的数据异步存入磁盘。这种分段式的作法能够确保磁盘写入操做不会影响用户界面的流畅度。

要想建立托管对象上下文,须要生成NSManagedObjectContext类的实例

先介绍到这里,至于CoreData的具体操做以后的博客里再去介绍。

相关文章
相关标签/搜索