1. 基本概念

Core Data是一种被称为对象关系映射(Object-Relational Mapping,ORM)技术的实现。

Core Data 架构图如下:

五个概念:

(1)数据模型(Data Model)

(2)持久化存储(Persistent Store)

(3)持久化存储Corrdinator

(4)Managed Object和Managed Object上下文

(5)Fetch Request

2 数据模型

数据模型定义了对象的数据结构、对象的组织方式、对象之间的关系,以及对象的行为。

  1. 实体

  Core Data的实体可以看作OC中类声明类似的东西,使用实体时,可以当作使用一个OC类。

  (1)特征(Property)

    实体拥有3种特征:

    a. Attributes(属性)

    b. Relationships(关系)

    c. Fetched Properties(提取属性)

  (2)Attributes(属性)

    Attributes在实体中的作用与OC类的变量实例相同——它们都用来装载数据。每个Attribute都有自己的类型。

  (3)Relationships(关系)

    Relationships定义了两个实体之间的关系。

    Relationships可以一对一也可以一对多,并且始终需要链向某个特定的对象。

    从OC的角度讲,一对一关系类似某个变量实例保存了指向另一个OC类实例的指针,而一对多关系则如同保留了一个指向诸如NSMutableArray或者NSSet这样的集合类的指针,它们可以容纳多个对象。

  (4)Fetched Properties(提取属性)

    Fetched Properties类似由某个已有对象发起的查询。

  2. Fetch Requests(提取请求)

    Fetched Property类似由某个已有对象发起的查询,那么Fetch Request则更接近对一个查询的类方法封装。

  3. Configuration(配置)

    Configuration是一组实体。不同的Configuration可以包含相同的实体。Configuration用来定义那些实体存储在哪个持久化存储中。

  4. 数据模型类:NSManagedObjectModel

    NSManagedObjectModel类代表内存中的数据模型。

    可以把多个.xcdatamodel文件联合起来组成一个NSManagedObjectModel实例,从而为从多个文件中获取的所有实体创建一个数据模型。

    合并main bundle中的所有.xcdatamodel未一个NSManagedObjectModel实例:

    _managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];

  5. 持久化存储和持久化存储助理

    持久化存储,有时又称为后背存储(Backing Store),是Core Data用于存储数据的地方。

    默认情况下,iOS设备上的Core Data使用应用程序Documents文件夹下的SQLite数据库为其持久化存储。

    持久化存储并不由OC类来呈现,而是通过NSPersistentStoreCoordinator控制器来进行访问。本质上,它接受来自各种不同类对持久化存储的读取和写入触发,并且对这些访问加以队列化(Serialize)以保证相同时间不会有多个针对同一文件的调用,否则可能会触碰到文件或数据库死锁。

    除了使用持久化助理(Persistent Store Coordinator)来进行存储的创建和与磁盘特定位置及数据模型相关联外,很少会直接使用它。相反,经常会用到的是一些高层Core Data调用,之后Core Data将负责与持久化存储助理进行交互以提取或写入数据。

  6. 获取数据模型

    持久化存储是iOS设备文件系统中的一个文件,它可以是SQLite数据库,也可以是普通二进制文件。

    数据模型文件包含在一个或多个带有。xcdatamodel扩展名的文件中,它描述了应用程序数据的结构。

    数据模型告诉持久化存储助理持久化存储中存储的所有数据的类型。

    而持久化存储助理则提供其他Core Data类用于保存、提取和搜索数据。

3. Managed Object

  实体定义了数据的结构,但它们并没有实际地持有任何数据,而真正的数据实例被称为Managed Object(管理对象或受控对象)。

  在Core Data中处理的任何一个实体的实例都是NSManagedObject对象或者子类对象。

4. 键值(Key-Value)编程

  与NSDictionary类相似,NSManagedObject支持一些与键值操作相关的方法,如valueForKey:和setValue:forKey:用于设置或获取属性值。

  Core Data使用KVC来向Managed Object存储数据以及从其中获取数据。

  KVC还包含Keypath这一概念。Keypath能够实现仅通过一条字符串,就可以遍历对象的层级结构。

  NSString *employerName = [managedObject valueForKeyPath:@"whereIWork.name"];

5. Managed Object 上下文

  Core Data包含一个对象,它建立了你的实体和Core Data其余部分之间的桥梁,它被称作Managed Object上下文(Context),通常称作“上下文”。

  上下文维护着载入或者创建的所有Managed Object的状态,它还记录了Managed Object从上次保存或载入之后发生的改变。当你想要载入或搜索对象时,可以通过上下文来完成;当你想要将修改提交给持久化存储时,可以保存上下文;如果想撤销对某个Managed Object的修改,则仅仅需要请求上下文来实现。(没错,它处理了所有对数据模型实现撤销和重做操作的处理。)

  (1)退出时保存

  (2)从持久化存储载入数据

  (3)Fetched Results Controller

    NSFetchedResultsController被设计用于处理一个特定的工作,即管理从Core Data的Fetch Request返回的对象。如果指定了Delegate,那么底层数据发生变化时,Delegate将会获得通知。

Core Data 入门的更多相关文章

  1. 《驾驭Core Data》 第二章 Core Data入门

    本文由海水的味道编译整理,请勿转载,请勿用于商业用途.    当前版本号:0.4.0 第二章 Core Data入门 本章将讲解Core Data框架中涉及的基本概念,以及一个简单的Core Data ...

  2. Core Data入门

    简介 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象. ...

  3. Core Data入门-备用

    简介 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象. ...

  4. iOS: Core Data入门

    Core Data是ORM框架,很像.NET框架中的EntityFramework.使用的基本步骤是: 在项目属性里引入CoreData.framework (标准库) 在项目中新建DataModel ...

  5. Core Data-备用

    Core Data是一个功能强大的层,位于SQLite数据库之上,它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互.Core Data将数据库行转换为OC对象(托管对象)来实现,这样无需 ...

  6. Core Data浅谈初级入门

    Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数 ...

  7. Core Data (二)备

    序 上次只是说了三个Core Data栈基本类.这次准备介绍一下常用的类. NSManagedObject Core Data是一次底层数据封装成面向对象的技术.最直接的表现就是在SQLite里面的一 ...

  8. 1. 初次尝试Core Data 应用程序(Core Data 应用开发实践指南)

    本书以实践的方式讲解 Core Data,不会过早讲一些难懂的话题.从入门知识入手,演示如何为范例程序添加Core Data 支持,后续章节再依次讨论更复杂的话题. 1.1. Core Data 是什 ...

  9. Asp.Net Core WebAPI入门整理(三)跨域处理

    一.Core  WebAPI中的跨域处理  1.在使用WebAPI项目的时候基本上都会用到跨域处理 2.Core WebAPI的项目中自带了跨域Cors的处理,不需要单独添加程序包 3.使用方法简单 ...

随机推荐

  1. ruby 的数组操作

    转自:http://fujinbing.iteye.com/blog/1126232 1. & [ 1, 1, 3, 5 ] & [ 1, 2, 3 ] # => [1, 3] ...

  2. VS2013下的64位与32位程序配置

    VS2013下的64位与32位程序配置   在Windows 7 64bit和Visual Studio 2013下生成64位程序. 新建一个Visual Studio Win32 Console项目 ...

  3. Tornado部署与运行

    运行多个Tornado实例 网页响应不是特别的计算密集型处理多个实例充分利用 CPU多端口怎么处理4.使用Supervisor监控Tornado进程安装(注意看是否需要指定使用python2版本) s ...

  4. L2TP/IPSec一键安装脚本

    本脚本适用环境:系统支持:CentOS6+,Debian7+,Ubuntu12+内存要求:≥128M更新日期:2017 年 05 月 28 日 关于本脚本:名词解释如下L2TP(Layer 2 Tun ...

  5. FPGA与图像处理

    用FPGA做图像处理最关键的一点优势就是:FPGA能进行实时流水线运算,能达到最高的实时性.因此在一些对实时性要求非常高的应用领域,做图像处理基本就只能用FPGA.例如在一些分选设备中图像处理基本上用 ...

  6. windows 我永远的最爱

    我配置好这个真不容易.总结下,配置中没搞清楚发布远程日志网址的意思:每一个博客配置都不同,比如新浪.网易.51技术博客

  7. 20165226 2017-2018-4 《Java程序设计》第7周学习总结

    20165226 2017-2018-4 <Java程序设计>第7周学习总结 教材学习内容总结 第十一章 JDBC与MySQL数据库 下载MySQL最新版本. 连接数据库 下载JDBC-M ...

  8. 安装SQL Servre2000时提示“command line option syntax error! type command /? for help”

    问题: 当程序正在安装ms数据访问组件时,弹出错误提示框:command line option syntax error,type command/? for help,点击确定继续:到了程序正在安 ...

  9. 爬虫高性能相关(协程效率最高,IO密集型)

    一背景常识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,采用串行的方式执行,只能等待爬取一个结束后才能继续下一个,效率会非常低. 需要强调的是:串行并不意味着低 ...

  10. node的socket.io类库概述

    socket.io是一个简单的小类库,该类库实现的功能类似于node中的net模块所实现的功能. 这些功能包括websocket通信,xhr轮询,jsonp轮询等. socket类库可以接受所有与服务 ...