zoukankan      html  css  js  c++  java
  • Core Data 入门

    1. 基本概念

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

    Core Data 架构图如下:

    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将会获得通知。

  • 相关阅读:
    ServletContext的应用
    behavior planning——11 create a cost function speed penalty
    behavior planning——10 behaior planning pseudocode
    behavior planning——inputs to transition functions
    卡尔曼滤波——20.卡尔曼预测
    卡尔曼滤波——19.卡尔曼滤波器代码
    卡尔曼滤波——18.预测函数
    卡尔曼滤波——17.高斯移动
    卡尔曼滤波——16.新的均值和方差
    卡尔曼滤波——14.—15分离的高斯分布
  • 原文地址:https://www.cnblogs.com/chemandy/p/3576979.html
Copyright © 2011-2022 走看看