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. 进阶的Redis之数据持久化RDB与AOF

    大家都知道,Redis之所以性能好,读写快,是因为Redis是一个内存数据库,它的操作都几乎基于内存.但是内存型数据库有一个很大的弊端,就是当数据库进程崩溃或系统重启的时候,如果内存数据不保存的话,里 ...

  2. Mac OS X系统 HomeBrew的安装和简单使用

    1. 前言 作为linux系统的忠实粉丝,我们都很喜欢 (Debian/Ubuntu)系列的apt包管理系统和(Redhat/Fedora)系列的yum包管理系统. 包括Windows用户都有多种方便 ...

  3. MySQL优化之表结构优化的5大建议

    很多人都将 数据库设计范式 作为数据库表结构设计“圣经”,认为只要按照这个范式需求设计,就能让设计出来的表结构足够优化,既能保证性能优异同时还能满足扩展性要求殊不知,在N年前被奉为“圣经”的数据库设计 ...

  4. java 并发时使用条件变量--Condition

    lock--unlock的方式在实际中使用较少,一般使用synchronized获取对象的内部锁替代,但是lock--unlock对了解synchronized有很大的帮助. 创建一个bank对象用于 ...

  5. webpack libray 参考例子

    备注:   使用webpack 进行模块导出,方便进行通信 1. 项目初始化 ├── main.js ├── package.json ├── show.js ├── webpack.config.j ...

  6. InnoSetup 打包Winform程序

    在VS2012之前,我们做安装包一般都是使用VS自带的安装包制作工具来创建安装包的,VS2012.VS2013以后,微软把这个去掉,集成使用了InstallShield进行安装包的制作了,虽然思路差不 ...

  7. MySQL 8 连接时出现 1251 和 2059 错误

    MySQL 8 连接时出现 1251 和 2059 错误 原因是MySQL 8 改了密码加密算法.1 原来是:mysql_native_password MySQL8 改成了 caching_sha2 ...

  8. Linux中源码安装编译Vim

    Linux中源码安装编译Vim Linux下学习工作少不了编辑器,Vim能使你的工作效率成倍的提高.在Ubuntu上安装vim使用命令直接安装很简单.但有时还是需要自己手动编译安装.例如: vim中的 ...

  9. 远程复制数据免登录 rsync 和 scp

    一.备用机上(用于存放备份的机器)  和 目标机上(需要备份的服务器 ,如 246) 都需要安装 :   yum install -y rsync 二.备用机上运行命令: -t rsa Generat ...

  10. RK3288 查看时钟树

    主控端可以通过指令查看时钟树,enable_cnt为1,表示时钟已使能. # cat d/clk/clk_summary cat d/clk/clk_summary clock enable_cnt ...