iOS数据持久化存储(2)--Core Data

 iOS 本地数据持久化存储:

1、plist

2、归档

3、NSUserDefaults 

4、NSFileManager

5、数据库


一、CoreData概述
        CoreData是苹果自带的管理数据库的工具。使用Core Data有很多原因,其中最简单的一条就是:它能让你为Model层写的代码的行数减少为原来的50%到70%。 这归功于之前提到的Core Data的特性。更妙的是,对于上述特性你也既不用去测试,也不用花功夫去优化。
        Core Data拥有成熟的代码,这些代码通过单元测试来保证品质。通过了几个版本的发布,已经被高度优化。 它能利用Model层的信息和运行时的特性,而不通过程序层的代码实现。 除了提供强大的安全支持和错误处理外,它还提供了最优的内存扩展性,可实现有竞争力的解决方案。不使用Core Data的话,你需要花很长时间来起草自己的方案,解决各种问题,这样做效率不高。
       另外:CoreData主要是iOS对SQLite数据库的封装。CoreData有 对象-关系 的映射的功能,能把OC的对象存储成数据库或 xml 等。如果数据存储使用的是coreData,那么读取时可以不使用 SQLite 语句。

二、关于Core Data常见的误解
  1、 Core Data不是一个关系型数据库,也不是关系型数据库管理系统(RDBMS)。
Core Data 为数据变更管理、对象存储、对象读取恢复的功能提供了支持。 它可以使用SQLite作为持久化存储的类型。 它本身并不是一个数据库(这点很重要,比如,你可以使用Core Data来记录数据变更,管理数据,但并不能用它向文件内存储数据)。

  2 、它并不能取代你写代码的工作。虽然可以纯粹使用XCode的数据建模工具和Interface Builder来编写复杂程序,但在更多的程序中,你都自己动手写代码。


三、CoreData 的核心概念

关键的概念图

iOS数据持久化存储(2)--Core Data_第1张图片

(1)NSManagedObjectModel 托管对象模型(MOM)

(用来加载Core Data数据模型文件,所有的数据模型可以全部加载到这个对象中。)

iOS数据持久化存储(2)--Core Data_第2张图片

这个MOM由实体描述对象,即NSEntityDescription实例的集合组成,实体描述对象介绍见下面第7条。
作用:添加实体的属性,建立属性之间的关系

(2)NSManagedObjectContext 托管对象上下文(MOC)

(用于操作数据模型(对象),并检测数据模型(对象)的变化。)

iOS数据持久化存储(2)--Core Data_第3张图片
在概念图2中,托管对象上下文(MOC)通过持久化存储协调器(PSC)从持久化存储(NSPersistentStore)中获取对象时,这些对象会形成一个临时副本在MOC中形成一个对象集合,该对象集合包含了对象以及对象彼此之间的一些关系。我们可以对这些副本进行修改,然后进行保存,然后MOC会通过 PSC 对 NSPersistentStore 进行操作,持久化存储就会发生变化。
CoreData中的NSManagedObjectModel 托管对象的数据模型(MOM),通过 MOC 进行注册。MOC有插入、删除以及更新数据模型等操作,并提供了撤销和重做的支持。
作用:插入数据,更新数据,删除数据

(3)NSPersistentStoreCoordinator 持久化存储协调器(PSC)

(数据持久化存储协调器,负责调度上层与底层对数据的操作。)

在应用程序和外部数据存储的对象之间提供访问通道的框架对象集合统称为持久化堆栈(persistence stack)。在堆栈顶部的是托管对象上下文(MOC),在堆栈底部的是持久化对象存储(persistent object stores)。在托管对象上下文和持久化对象存储之间便是持久化存储协调器(PSC)。应用程序通过类NSPersistentStoreCoordinator的实例访问持久化对象存储。
持久化存储协调器为一或多个托管对象上下文提供一个访问接口,使其下层的多个持久化存储可以表现为单一一个聚合存储。一个托管对象上下文可以基于持久化存储协调器下的所有数据存储来创建一个对象图。持久化存储协调器只能与一个托管对象模型(MOM)相关联。

(4)NSManagedObject 托管对象(MO)

(具体的数据模型对象。)

iOS数据持久化存储(2)--Core Data_第4张图片

托管对象必须继承自NSManagedObject或者NSManagedObject的子类。NSManagedObject能够表述任何实体。它使用一个私有的内部存储,以维护其属性,并实现托管对象所需的所有基本行为。托管对象有一个指向实体描述的引用。NSEntityDescription 实体描述表述了实体的元数据,包括实体的名称,实体的属性和实体之间的关系。

(5)Controller 控制器
概念图1中绿色的 Array Controller,Object Controller,Tree Controller 这些控制器,一般都是通过 control+drag 将 Managed Object Context 绑定到它们,这样我们就可以在 nib 中可视化地操作数据

(6)NSFetchRequest 获取数据请求
使用托管对象上下文来检索数据时,会创建一个获取请求(fetch request)。类似Sql查询语句的功能。

(7)NSEntityDescription 实体描述

(模型描述类,能够实例化得到具体的数据模型对象。)

实体描述对象提供了一个实体的元数据,包括实体名(Name),类名(ClassName),属性(Properties)以及实体属性与其他实体的一些关系(Relationships)等。

(8).xcdatamodeld

iOS数据持久化存储(2)--Core Data_第5张图片

里面是.xcdatamodeld文件,用数据模型编辑器编辑,编译后为.momd或.mom文件。
我们可以选中我们的应用程序(路径类似为/Users/Childhood/Library/Application Support/iPhone Simulator/7.1/Applications/005D926F-5763-4305-97FE-AE55FE7281A4),右键显示包内容,我们看到是这样的。


四、Core Data运作机制

iOS数据持久化存储(2)--Core Data_第6张图片


1,应用程序先创建或读取模型文件(后缀为xcdatamodeld)生成 NSManagedObjectModel 对象。从模型文件(后缀为 xcdatamodeld)读取。


2,然后生成 NSManagedObjectContext 和 NSPersistentStoreCoordinator 对象,前者对用户透明地调用后者对数据文件进行读写。


3,NSPersistentStoreCoordinator 负责从数据文件(xml, sqlite,二进制文件等)中读取数据生成 Managed Object,或保存 Managed Object 写入数据文件。
4,NSManagedObjectContext 参与对数据进行各种操作的整个过程,它持有 Managed Object。我们通过它来监测 Managed Object。监测数据对象有两个作用:支持 undo/redo 以及数据绑定。这个类是最常被用到的。


5,Array Controller, Object Controller, Tree Controller 这些控制器一般与 NSManagedObjectContext 关联,因此我们可以通过它们在 nib 中可视化地操作数据对象。


五、代码步骤

1、加载Core Data文件

2、将数据的存储方式设定为数据库

iOS数据持久化存储(2)--Core Data_第7张图片

3、操作数据:增加

iOS数据持久化存储(2)--Core Data_第8张图片

4、操作数据:查询

iOS数据持久化存储(2)--Core Data_第9张图片

5、操作数据:修改


6、操作数据:删除



你可能感兴趣的:(数据,存储,ios开发,coredata)