发表于2024-12-22
√ 这个数据库框架灵活到难以控制,本书带你避开衔接,驾驭强大!
√ 全程实践|工作原理|性能提升|融入 Swift ,你需要知道的这里都有!
√ objc 是全球知名 iOS 教学网站,其精品图书更是惠及无数开发者!
√ Swifter 一书作者喵神王巍组织翻译objc系列精品图书将相继问世!
本书向读者介绍使用Core Data时需要特别注意的事项,这将帮助读者避开使用Core Data这个十分灵活且异常强大的框架时的一些陷阱。我们从一个简单的应用例子开始,逐步将其扩展为包含关系、高级数据类型、并发、同步以及其他很多特性的完整例子,并在这个过程中对所有这些主题进行讲解。在本书后半部分,我们还会超出这个基本应用所需要涉及的范围,将知识点深入扩展到Core Data幕后的工作原理上。我们会学习如何获取高性能、不同Core Data设置之间的权衡,以及如何对Core Data代码进行调试和性能测试。本书所有的代码都使用Swift编写,我们也展示了如何将Swift的语言特性融入Core Data中,并写出优雅和安全的代码。我们希望读者在阅读本书的时候有一定的Swift和iOS开发基础,不过相信不论是新人还是富有经验的开发者,都能从本书中找到实用的信息和设计模式。
王巍 (onevcat) ,《Swifter(第2版):100个Swift 2 开发必备Tip》作者,来自中国的一线 iOS 开发者,毕业于清华大学。在校期间就开始进行 iOS 开发,拥有丰富的 Cocoa 和 Objective-C 开发经验,另外他也活跃于使用 C# 的 Unity3D 游戏开发界。曾经开发了《小熊推金币》,《Pomo Do》等一系列优秀的 iOS 游戏和应用。在业余时间,王巍会在 OneV's Den 撰写博客,分享他在开发中的一些心得和体会。另外,王巍还是翻译项目 objc 中国的组织者和管理者,为中国的 Objective-C 社区的发展做出了贡献。同时,他也很喜欢为开源社区贡献代码,是著名的 Xcode 插件 VVDocumenter 的作者。现在王巍旅居日本,并就职于即时通讯软件公司 Line,从事 iOS 开发工作,致力于为全世界带来更好体验和功能的应用。
I Core Data基础 1
第1章 初探Core Data 2
1.1 Core Data架构 2
1.2 数据建模 4
实体和属性 5
托管对象子类 6
1.3 设置Core Data栈 7
1.4 显示数据 9
获取请求 11
Fetched Results Controller 13
1.5 操作数据 19
插入对象 19
删除对象 22
1.6 总结 26
重点 26
第2章 关系 27
2.1 添加Country和Continent实体 27
子实体 31
2.2 创建关系 33
其他类型的关系 35
建立关系 36
关系和删除 41
2.3 适配用户界面 43
2.4 总结 48
重点 48
第3章 数据类型 49
3.1 标准数据类型 49
数值类型 49
日期 50
二进制数据 50
字符串 51
3.2 原始属性和临时属性 51
原始属性 51
临时属性 52
3.3 自定义数据类型 52
自定义值转换器 52
自定义存取方法 56
3.4 默认值和可选值 59
3.5 总结 60
重点 60
II 理解Core Data 61
第4章 访问数据 62
4.1 获取请求 62
对象惰值 64
获取请求的结果类型 67
批量获取 69
异步获取请求 70
4.2 关系 70
4.3 其他取回托管对象的方法 71
4.4 内存考量 72
托管对象及其上下文 72
关系的循环引用 73
4.5 总结 74
重点 74
第5章 更改和保存数据 76
5.1 变更追踪 76
5.2 保存更改 78
验证 80
保存冲突 82
5.3 批量更新 82
5.4 总结 84
重点 84
第6章 性能 86
6.1 Core Data栈的性能特质 86
详解性能 87
6.2 避免获取请求 89
关系 89
搜索特定的对象 91
类似单例的对象 93
小数据集 96
6.3 优化获取请求 96
对象排序 96
避免多个、连续的惰值 97
批量获取 98
Fetched Results Controller 99
关系预加载 99
索引 100
6.4 插入和修改对象 102
6.5 如何构建高效的数据模型 103
6.6 字符串和文本 106
6.7 独家秘诀的可调参数 106
6.8 总结 107
III 并行和同步 109
第7章 与网络服务同步 110
7.1 组织和设置 110
项目结构 111
7.2 同步架构 112
7.3 上下文属主 113
线程、队列和上下文 113
7.4 响应本地更改 115
7.5 响应远程更改 119
7.6 更改处理器 119
上传Moods 120
7.7 删除本地对象 123
7.8 分组和保存更改 123
7.9 扩展同步架构 125
跟踪每个属性的更改 125
链接更改处理器 125
自定义网络代码 126
第8章 使用多个上下文 128
8.1 Core Data和并发 128
在不同的上下文之间传递对象 130
合并更改 132
8.2 Core Data栈 134
两个上下文,一个协调器 134
两个协调器 136
嵌套上下文的设置 137
8.3 总结 144
重点 145
第9章 使用多个上下文的问题 146
9.1 保存冲突 146
预定义的合并策略 147
自定义合并策略 148
9.2 删除对象 153
两步删除法 154
传播删除 156
9.3 唯一性约束 157
9.4 总结 159
IV 进阶话题 161
第10章 谓词 162
10.1 一个简单的例子 162
使用谓词 163
10.2 用代码来创建谓词 164
10.3 格式字符串 165
比较 166
可选类型值 167
日期 168
10.4 合并多个谓词 168
常量谓词 170
10.5 遍历关系 171
子查询 171
10.6 匹配对象和对象ID 172
10.7 匹配字符串 173
字符串和索引 175
10.8 可转换的值 175
10.9 性能和排序表达式 176
10.10 总结 177
第11章 文本 178
11.1 一些例子 178
11.2 搜索 179
字符串标准化 180
高效搜索 182
11.3 排序 183
一种简单的方法 183
更新一个已排序的数组 184
持久化一个已排序的数组 188
11.4 总结 189
重点 189
第12章 数据模型版本以及迁移数据 190
12.1 数据模型版本 190
12.2 数据迁移的过程 192
自动数据迁移 193
手动数据迁移 194
12.3 推断的映射模型 201
12.4 自定义映射模型 202
自定义实体映射策略 204
12.5 数据迁移和用户界面 206
12.6 测试数据迁移 209
调试数据迁移时的输出 210
12.7 总结 210
重点 211
第13章 性能分析 212
13.1 SQL调试输出 212
获取请求 213
填充惰值 217
保存数据 218
13.2 Core Data Instruments 219
13.3 线程保护 222
13.4 总结 222
第14章 关系型数据库基础和SQL 223
14.1 一个嵌入式数据库 223
14.2 数据表、列以及行 224
14.3 数据库系统的结构 225
查询处理器 225
存储管理器 226
事务管理器 226
数据和元数据 226
14.4 数据库语言SQL 227
排序 228
14.5 关系 229
一对一关系 229
一对多关系 230
多对多关系 230
14.6 事务 231
14.7 索引 232
14.8 日志 232
14.9 总结 233
译者序
在20 世纪60 年代,导航式数据库的概念随着磁盘直接存取而发展起来;从70 年代开始,关系型数据库登上历史舞台,它的概念一直延续至今。我们无法想象现代的计算机程序中离开了数据库会是怎样的景象,数据库技术已经成了这个世界方方面面的基石。
在数据管理和数据库相关的方面,Apple 给出的选择是Core Data。正如在简介中所提到的那样,Core Data 其实并不是一个传统意义上的数据库,而是一套对象图管理系统。这套系统默认使用SQLite 作为底层存储,通过由低向高地将相关的管理组件构建为一个栈,来提供缓存和对象管理机制。这让我们对于数据对象的存储和访问都能够高效而有序地进行。从这一点上来说,Core Data 与单纯的数据库相比,实在是强大得多。
但是能力越大,责任也越大。如果使用不当,那么Core Data 不但不能为你提供良好的数据存储和访问的性能,甚至会连最基本的操作都难以保证。在这种情况下,Core Data 将不再是你开发的助力,反而会成为掣肘。不幸的是,Core Data 本身学习曲线比较陡峭,而涉及的概念又非常多,所以真正想要精通Core Data 并完全发挥它的效能并不是很容易的事情。Apple 在iOS 的很多原生应用中大量使用了Core Data,比如照片、音乐和iBooks 等,并且事实证明它们都出色地完成了任务。在国外,也有很多开发者使用Core Data 作为应用程序的数据层和持久化的选择。相比其他第三方的解决方案,Core Data 不需要引入额外的框架,也相对稳定可靠。但是在国内,现在使用这项技术的开发者较少,大家对Core Data 的研究也普遍没有国外深入,这导致了提到Core Data 很多人会不自觉地抗拒和躲避。将Core Data的使用方法和最佳实践以更容易理解的方式带给国内开发者,促进大家接触Core Data 的架构和思想,这正是我们选择翻译本书的目的。
本书的结构和阅读方法在前言中会有所说明,这里就不再赘述了。需要补充的是,本书里提供了大量的例子和相应的代码,它们大多是需要进行权衡的选择,并对应了不同的场景。只有在你充分理解这些例子的含义后,你才可能在实际使用时做出正确的判断。另外,CoreData 的灵活性是一把双刃剑,当你选择了更多的上下文以及协调器时,也意味着你为项目引入了更多的复杂度。尽可能在能够满足需求的前提下,选择最简单的Core Data 栈设置,是高效、正确使用Core Data 的关键。
本书原著的两位作者有着多年的Core Data 使用经验。Florian Kugler1 是objc.io 的联合创始人,曾经为objc.io 撰写了很多Core Data 相关的文章,深受读者喜爱。Daniel Eggert2 曾供职于Apple,帮助Apple 将照片应用迁移到Core Data 框架内。他们的努力让Core Data 这个看起来有些“可怕”的框架变得平易近人,借此我们可以一窥Core Data 的究竟。不过不论是原作者还是译者,其实和各位读者一样,都只不过是普通开发者中的一员,所以本书出现谬漏可能在所难免。如果你在阅读时发现了问题,可以通过出版社联系我们,我们将及时研究并加以改进。
最后,祝你阅读愉快。
徐 涛
钱世家
王 巍
译序
在 20 世纪 60 年代,导航式数据库的概念随着磁盘直接存取而发展起来;从 70 年代开始,关系型数据库登上历史舞台,它的概念一直延续至今。我们无法想象现代的计算机程序中离开了数据库会是怎样的景象,数据库技术已经成了这个世界方方面面的基石。
在数据管理和数据库相关的方面,Apple给出的选择是Core Data。正如在简介中所提到的那样,Core Data其实并不是一个传统意义上的数据库,而是一套对象图管理系统。这套系统默认使用SQLite作为底层存储,通过由低向高地将相关的管理组件构建为一个栈,来提供缓存和对象管理机制。这让我们对于数据对象的存储和访问都能够高效而有序地进行。从这一点上来说,Core Data与单纯的数据库相比,实在是强大得多。
但是能力越大,责任也越大。如果使用不当,那么Core Data不但不能为你提供良好的数据存储和访问的性能,甚至会连最基本的操作都难以保证。在这种情况下,Core Data将不再是你开发的助力,反而会成为掣肘。不幸的是,Core Data本身学习曲线比较陡峭,而涉及的概念又非常多,所以真正想要精通Core Data并完全发挥它的效能并不是很容易的事情。Apple在iOS的很多原生应用中大量使用了Core Data,比如照片、音乐和iBooks等,并且事实证明它们都出色地完成了任务。在国外,也有很多开发者使用Core Data作为应用程序的数据层和持久化的选择。相比其他第三方的解决方案,Core Data不需要引入额外的框架,也相对稳定可靠。但是在国内,现在使用这项技术的开发者较少,大家对Core Data的研究也普遍没有国外深入,这导致了提到Core Data很多人会不自觉地抗拒和躲避。将Core Data的使用方法和最佳实践以更容易理解的方式带给国内开发者,促进大家接触Core Data的架构和思想,这正是我们选择翻译本书的目的。
本书的结构和阅读方法在前言中会有所说明,这里就不再赘述了。需要补充的是,本书里提供了大量的例子和相应的代码,它们大多是需要进行权衡的选择,并对应了不同的场景。只有在你充分理解这些例子的含义后,你才可能在实际使用时做出正确的判断。另外,CoreData的灵活性是一把双刃剑,当你选择了更多的上下文以及协调器时,也意味着你为项目引入了更多的复杂度。尽可能在能够满足需求的前提下,选择最简单的Core Data栈设置,是高效、正确使用Core Data的关键。
本书原著的两位作者有着多年的Core Data使用经验。Florian Kugler是objc.io的联合创始人,曾经为objc.io撰写了很多Core Data相关的文章,深受读者喜爱。Daniel Eggert曾供职于Apple,帮助Apple将照片应用迁移到Core Data框架内。他们的努力让Core Data这个看起来有些“可怕”的框架变得平易近人,借此我们可以一窥Core Data的究竟。不过不论是原作者还是译者,其实和各位读者一样,都只不过是普通开发者中的一员,所以本书出现谬漏可能在所难免。如果你在阅读时发现了问题,可以通过出版社联系我们,我们将及时研究并加以改进。
最后,祝你阅读愉快。
徐 涛
钱世家
王 巍
前言
Core Data是Apple为iOS、OS X、watchOS和tvOS而设计的对象图管理(object graph man-agement)和数据持久化框架。如果你的App需要存储结构化的数据,那么Core Data是一个显而易见的方案:它是现成的,Apple仍然在积极地维护它,而且它已经存在超过10年了。Core Data是一个成熟、经过实践检验的代码库。
然而 Core Data 最初会让人有一些困惑:它非常灵活,但是 API 的最佳实践却并非显而易见。换句话说,本书的目标是帮助读者快速入门Core Data。我们希望提供给读者一系列包括从简单到高级的使用场景中的最佳实践,这样你可以充分利用Core Data的能力而又不会迷失在一些不必要的复杂性中。
比如,Core Data经常被诟病难以在多线程环境中使用。其实Core Data的并发模型非常明确和一致。如果正确使用,那么它可以帮助你避免许多并发编程中一些固有的陷阱。其他的复杂性并不是由Core Data引入的,它们的根源其实是并发本身。我们会在第9章中对其进行深入研究,另外我们还会实际演示一个后台同步方案的例子。
除此之外,Core Data也经常被吐槽性能糟糕。如果你像使用关系型数据库那样来使用CoreData,那么你会发现与直接使用类似SQLite这样的数据库相比,Core Data的性能开销会很高。但如果把 Core Data 当成一个对象图管理系统来正确使用,那么得益于内建的缓存和对象管理机制,它在很多方面实际上反而更快。此外,抽象级别更高的API可以让你专注于优化App里关键部分的性能,而不是从头开始来实现如何持久化。在本书中,我们会介绍保持Core Data高性能的最佳实践,并在专门讲性能以及性能分析的章节中探讨如何解决Core Data的性能问题。
本书使用Core Data的方式
本书展示了如何在实际例子中使用Core Data,而不仅仅是简单地对API手册进行一些扩展。
我们有意专注于完整例子的最佳实践。根据我们的经验,正确地组合使用Core Data的各个部分往往是最大的挑战。
此外,本书还深入解释了Core Data内部的运作原理。了解Core Data这个灵活框架可以帮助你做出正确的决定,同时能让你的代码保持简单易懂。特别是当遇到并发和性能问题时,这一点尤为重要。
示例代码
你可以在GitHub上找到一个完整的示例程序的源代码。我们在本书中很多地方都将用这个示例程序来演示Core Data在较大的项目中面临的挑战和相应的解决方案。
请注意该示例程序代码有时会和本书前面的一些章节中的示例程序有所不同。因为示例项目是最终形态的完整的代码,而本书前面章节中描述的是该示例程序早期、简单阶段的代码。
结构
在本书的第一部分,我们会创建一个简单版本的应用程序,来演示如何使用Core Data以及Core Data的基本工作原理。即使早期的示例对读者来说可能相当容易,但我们仍然建议读者浏览本书的这些部分,因为后面更复杂的例子是建立在前面介绍的最佳实践和技术基础之上的。我们还想告诉你的是,即便在简单的应用场景中,Core Data也会非常有用。
第二部分则着重深入介绍Core Data各个部分是如何一起协作的。我们会仔细探讨当以不同方式访问数据时会发生什么,我们也会对插入或者操作数据时发生的情况进行研究。这部分所覆盖的内容会比写一个简单的Core Data应用程序所必要得多,这些方面的知识在处理更大或更复杂的情况时可以派上用场。在此基础上,我们将以性能方面的考量来对这个部分进行总结。
第三部分从描述一个用来保持本地数据与网络服务一致的通用同步架构开始,然后我们会深入探讨如何在Core Data中同时使用多个托管对象上下文(managed object context) Core Data 下载 mobi epub pdf txt 电子书 格式
Core Data 下载 mobi pdf epub txt 电子书 格式 2024
Core Data 下载 mobi epub pdf 电子书还好吧,有点烧脑,内容基于swift 2.2的
评分这个版本是基于swift2.0的,大家买的时候一定区分清楚,不要买那个黑色的老版本
评分还好吧,有点烧脑,内容基于swift 2.2的
评分送货快 包装完好,服务好 很满意的体验
评分很不错的书
评分还没看呢!!!
评分送货上门比较放方便
评分?不错的一本书
评分喵神翻译的基本书真的是swift中难得的好书
Core Data mobi epub pdf txt 电子书 格式下载 2024