發表於2024-11-05
√ 這個數據庫框架靈活到難以控製,本書帶你避開銜接,駕馭強大!
√ 全程實踐|工作原理|性能提升|融入 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 電子書送貨上門比較放方便
評分很好 不錯
評分書很新,還有印刷的味道,內容也比較豐富!
評分書一般,像是趕時間齣的一本書,源碼無法下載,內容與標題不符,想看基礎的同學可以看看。
評分産品很好,很喜歡,下次還會再來購買
評分很不錯的書
評分質量一般 是還不錯
評分質量一般 是還不錯
評分暫時還沒看,不能做齣客觀的評價
Core Data mobi epub pdf txt 電子書 格式下載 2024