Core data

1. Managed object model

它代表数据模型,以及它们的属性,它们之间的关系。
Core Data的其它部分可以使用它来创建对象,存储属性和保存数据。
可以把NSManagedObjectModel看作是一个数据库(schema)就是比table高一级的那种。
SQLite 是 Core Data 中许多可以用的长期存储类型之一.

xcdatamodel 文件是图形编辑创建方便操作的. 在后台,momc编译器负责编译model 文件到一系列的momd文件夹。
就像Swift 代码被编译和优化使得它可以在设备上运行,编译好的模型也可以在运行时高效地访问. Core Data 在运行时用编译好的momd文件夹里的文件来初始化 NSManagedObjectModel。

2.The persistent store

NSPersistentStore 负责读取和存储。
Core Data提供了四种不同的 NSPersistentStore,三个原子性的(一个事物不能影响另外一个事物),一个非原子性的。
原子性的 persistent store 需要在任何读写操作前被完全反序列化然后加载到缓存。 相反的, 非原子性的 persistent store 可以在需要的时候载入它自身的一部分。

四种内建Core Data 存储类型

  1. NSQLiteStoreType。 它是的是SQLite实现存储的。他是Core Data支持的唯一的一个非原子性的存储类型,。轻量且高效的内存占用使得它成为了绝大部分 iOS 项目最好的选择. Xcode’s Core Data 模版默认使用这种存储类型。.
  2. NSXMLStoreType 是由XML文件实现的, 这使得它成为了所有存储类型中最适合人类阅读的类型。这个类型是原子性的, 所以它的内存占用会很大. NSXMLStoreType 仅在 OS X 上支持.
  3. NSBinaryStoreType 是由二进制数据文件实现存储的,就像NSXMLStoreType, 它也是原子性的存储类型, 所以整个二进制文件必须在需要用到的时候加载整个文件。在实际应用中很少会用到这个类型。
  4. NSInMemoryStoreType 内存中保存的储存类型。某种意义上来说,他不是一种长期存储。Inaway,this store type is not really persistent. 关闭app或者手机都会使得这种类型的数据消失。虽然看起来不符合Core Data的定义, 但是in-memory 存储类型在单元测试和某些类型的缓存中还是很有用的。

也可以继承NSIncrementalStore 类来自定义存储类型。[官方文档](https://developer.apple.com/library/ios/documentation/DataManagement/
Conceptual/IncrementalStorePG/Introduction/Introduction.html)

3. The persistent store coordinator

NSPersistentStoreCoordinator 是 managed object model 和 persistent store之间的桥梁。它负责使用model和 persistent stores 来完成Core Data中最艰难的工作。比如用NSManagedObjectModel 发送信息给NSPersistentStore和从 NSPersistentStore获取信息。
NSPersistentStoreCoordinator 隐藏了persistent store的配置实现部分的细节。有以下两个好处:

  1. NSManagedObjectContext (coming next!) 不需要知道知道存储类型是什么,SQLite也好,XML也好,甚至是自定义的存储类型。
  2. 如果有多个plepersistent stores,persistent store coordinator 会呈现一个统一的接口给 managed context. 对managed context 而言, 它总是在跟一种persistent store打交道。

4. The managed object context

在四个组件中,日常接触最多的就是 NSManagedObjectContext 。 其它几个基本上只有在想要对Core Data做一些高级的操作才会用到。

因为 NSManagedObjectContext 很常用,所以知道contents(上下文环境)是怎么工作的就变得非常重要了。

  1. context可能是managed objects的内存缓存器。

  2. 你对 Core Data objects 的所有操作都在managed object context里。

  3. 你所有对硬盘上底层数据的改变都只有在调用context里的save()函数后才会真正生效。

  4. Context 管理它创建和获取的对象的生命周期。这些生命周期管理包括强大的功能诸如错误处理,反相关系处理以及数据验证。

  5. Managed Object (管理对象)无法在没有关联context(上下文环境) 的情况下存在。事实上,它们俩之间的关系非常紧,每一个managed object 都维持着对它的上下文环境的引用,可以通过以下方式来访问

    let managedContext = employee.managedObjectContext
    
  6. Contexts 是非常专一的。一旦Managed object建立跟特定上下文环境的联系,它会在整个生命周期维持着对同一个contetxt的联系。

  7. 一个应用可以使用超过不止一个context,大多数大型app都是这种类型。因为context处于硬盘上的内存高速缓存区,所以可以同时在两个不同的context中加载同一个Core Data 对象。

  8. Context 是线程安全的。Managed object 也是如此。 所以只可以在他们创建时中的同一线程中处理Context和Managed Object之间的交互。

5. The persistent store container

在iOS10中,Apple引入了一个新的类 NSPersistentContainer。这个类是上述四个类的管理类。不需要在浪费时间去写模版性的代码来建立它们四者之间的联系,只需要初始化一个NSPersistentContainer类就可以继续接下来的操作s了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容

  • 卷首语 欢迎来到 objc.io 第四期! 本期我们将深入地研究苹果提供的模型层框架,Core Data。 Cor...
    评评分分阅读 889评论 0 9
  • 转载自Core Data概述 Core Data 可能是 OS X 和 iOS 里面最容易被误解的框架之一,为了帮...
    夏天的风_song阅读 896评论 0 4
  • 虽然从接触iOS开发开始,做的每一个项目都在用Core Data,但是一些比较底层的东西都是boss写的或者用的是...
    卖萌凉阅读 2,814评论 1 11
  • 适读对象: 需要入门Core Data的朋友; 像我一样,尚未学过数据库相关课程,不太懂怎么写SQLite语句的朋...
    AntonyWong阅读 5,164评论 8 21
  • 注:本文来自Core Data by tutorials 2.0 , swift + iOS 9 .本文非翻译 只...
    smalldu阅读 889评论 3 5