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构建全局并发锁

    Redis构建全局并发锁 https://www.cnblogs.com/FG123/p/9990336.html 谈起Redis的用途,小伙伴们都会说使用它作为缓存,目前很多公司都用Redis作为缓 ...

  2. MySQL排序_20160926

    在工作中对数据进行排序也是最常用的,比如根据用户的下单金额降序 或者对销售业绩进行降序排序 在考核员工KPI时候也经常用到 一.order  by 函数 order by 函数默认根据后面字段升序,使 ...

  3. SEO SEM

    SEO:搜索引擎优化SEM:搜索引擎营销 SEO排名机制:搜索引擎蜘蛛 权重 算法 排名规则 搜索引擎提交入口: 1.百度搜索网站登入口 2.Google网站登入口 3.360搜索引擎登入入口 4.搜 ...

  4. $x \rightarrow \infty$时多项式型函数的极限

    \[ \lim_{x \rightarrow \infty} \frac{\sqrt{4x^6-5x^5}-2x^3}{\sqrt[3]{27x^6+8x}} \\ =\lim_{x \rightar ...

  5. java基础--关键字

  6. Hibernate One-to-One Mappings 一对一关系映射

    Hibernate One-to-One Mappings 一对一关系映射 关键:一对一关系映射和多对一关系映射非常像.仅仅是unique 属性值为 true 样例:一个员工仅仅能有一个地址. Hib ...

  7. kubectl&docker容器命令行窗口太小

      #k8s  kubectl exec -ti busybox env COLUMNS=$COLUMNS LINES=$LINES bash #k8s example kubectl exec -t ...

  8. XAMPP服务器在局域网只能本机访问且无法用IP访问的解决办法 (转)

    XAMPP服务器在局域网只能本机访问且无法用IP访问的解决办法 前几天安装了xampp for pc 1.7.4版本. 装好后在本地电脑通过https://localhost访问正常. 然后换了台电脑 ...

  9. requirejs 到底有什么好处?

    无论是在backbone时代,还是angularjs 时代 我都用过requirejs, 后来慢慢全都去掉了, 因为在前端开发requirejs 感觉没有带来任何实质性的好处. 从几个方面说说我的感受 ...

  10. C++关于变量初始化的琐记

    #include <iostream> using namespace std; class Base{ virtual void func1() { cout<<" ...