IOS中CoreData浅析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS中CoreData浅析相关的知识,希望对你有一定的参考价值。

CoreData简介:

  • 什么是CoreData?

    • Core Data是ios5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何SQL语句

    • CoreData 不能执行SQL语句 取而代之,操作的是对象。而常用的三方库 FMDB SQLite 可以直接SQL语句

  • CoreData和数据库有什么区别?

    • CoreData是一个苹果原生的框架,它拥有像数据库一样存储数据的功能,但本身并不是数据库

      • Core Data 是iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管 理数据。使用Core Data 框架,程序员可以很轻松有效地通过面向对象的接口管理数据,所以说CoreData不是数据库,不要以数据库的眼光看待.
    • Core Data 不是应用程序的数据库,也不是将数据持久化保存到数据库的API。Core Data 是一个 用于管理对象图的框架。Core Data 可以把对象图写入磁盘从而持久化保存

  • CoreData有什么特点?

    •   (1)CoreData提供了模型层的技术,可以直接对OC对象进行数据持久化

      • Core Data 是一个模型层的技术。帮助建立代表程序状态的模型层,Core Data 也是一种 持久化技术,能将模型对象的状态持久化到磁盘,但它最重要的特点是:Core Data 不仅是 一个加载、保存数据的框架,它还能和内存中的数据很好的共事
    •   (2)在数据的存储操作过程中,CoreData无需编写任何SQL语句

    • (3)Core Data 使用包括实体和实体间关系,以及查找符合某些条件实体的请求等内容

    • (4)开发者可以在纯对象层上查找与管理这些数据,而不必担心存储和查找的实现细节

    • (5)Core Data 框架最早出现在Mac OS X 10.4 Tiger 与iOS 3.0 系统,经过成千上万的应 用程序以及数以百万用户的反复的验证,Core Data 确实已经是一套非常成熟的框架

    • (6)CoreData 利用了Objective-C 语言和运行时,巧妙地集成了Core Foundation 框架。是 一个易于使用的框架,不仅可以优雅地管理对象图,而且在内存管理方面表现异常优异

CoreData原理: 

  • 第一眼看到Core Data 令人生畏的复杂架构关系,很多人都会有无从下手的感觉

  • 可是,一旦理解了架构图中各个部件的组成及相互之间的关系,就能体会到Core Data API 的简 洁和直观了

  • Core Data stack(技术堆栈):如果能够理解Core Data stack 中的各个成员所扮演的角色,那么再 使用Core Data 就不会感觉到困难了

1.1-什么是CoreData Stack?

  • Core Data stack 是Core Data 的核心,由一组Core Data 核心对象组成

    • NSManagedObjectContext 对象管理上下文: 负责管理模型的对象的集合

    • NSManagedObjectModel 被管理的对象模型: 负责管理对象模型

    • NSPersistentStoreCoordinator 存储调度器: 负责将数据保存到磁盘的

1。2-CoreData Stack中的对象是如何协调工作的呢?

 

 

  • 组成可分为两部分

    • 对象图管理:主要是指对象管理上下文(NSManagedObjectContext)通过对对象模型(NSManagedObjectModel)实施对象管理.

    • 数据持久化:主要是指存储器(NSPersistentStore)来操作SQLite数据库,将数据存储在磁盘中(这部分是系统帮我们完成不需要我们管).

      • 在这两部分的中间,即堆栈中间,是持久化存储协调器(Persistent Store Coordinator, PSC)。通过它将对 象图管理部分和持久化部分绑在一起。当这两部分中的一部分需要和另一部分交互,将通过PSC 来 调节
  • 其中的注意点:
  • 一个工程可以有多个管理模型的Context,一个存储调度器可以调度多个存储器,不过在一般的开发中,我们只需要一个Contect和一个存储器就足够了

 

以上是关于IOS中CoreData浅析的主要内容,如果未能解决你的问题,请参考以下文章

浅析Minium,微信小程序自动化测试框架

iOS:生成的 CoreData 代码中的 EXC_ARM_DA_ALIGN

iOS:SharedCoreData 示例代码 (iCloud + CoreData) |如何合并更改

iOS CoreData

FMDB浅析

Swift 中适用于 iOS 9 和 iOS 10 的 CoreData 堆栈