Core_Data

**Core Data** 是蘋果公司所開發的 macOS 作業系統（舊稱：Mac OS X 及 OS X）中 Cocoa API 的一部分，首次在 Mac OS X 10.4 _Tiger_ 與 iOS 3.0 系統中出現。它允許按照實體 - 屬性 - 值模型組織資料，並以 XML，二進位檔案或 SQLite 資料檔案的格式將其序列化。Core Data 允許使用者使用代表實體和實體間關係的高層物件來運算元據。它也可以管理序列化的資料，提供物件生存期管理與 object graph 管理，包括儲存。Core Data 直接與 SQLite 互動，避免開發者使用原本的 SQL 語句。

就像 Cocoa 繫結在模型 - 視圖 - 控制器設計中做了很多控制器的工作一樣，Core Data 做了很多資料模型的工作。它的主要任務是負責資料更改的管理，序列化到磁碟，最小化記憶體占用，以及查詢資料。

專長於 Core Data 及 Cocoa 軟體開發的資訊圖書作家 Marcus Zarra 曾說：

## 使用方法

Core Data 使用包括實體和實體間關係，以及尋找符合某些條件的實體的請求等內容的高層資料模型描述資料。開發者可以在純物件層上尋找與管理這些資料，而不必擔心儲存和尋找的實現細節。Interface Builder 中的控制器物件可以直接取得與管理實體，若與 Cocoa 繫結結合，則可以在不寫自訂代碼的情況下讓使用者介面顯示、修改與管理資料模型中的大部分內容。

例如：開發者希望開發一個管理 vCard 的程式。作者希望使用 Core Data 將一些 vCard 讀入物件中，然後把它們存入一個大 XML 檔案中。開發者需要在 Xcode 中建立資料模型，然後到 Interface Builder 中加入 _Core Data Entity_ 項以建立其資料模型對應的 GUI。然後，開發者可以加入標準的 Objective-C 代碼以讀取 vCard，並將資料寫入由 Core Data 管理的實體中。在此，開發者的代碼是管理 Core Data 物件，而非其對應的 vCard。最後，將 `Save` 選單項連接到控制器物件對應的方法上，使得控制器在接到_儲存_訊息後自動的檢查資料堆疊，確認資料是否合法，最後利用當前更改重寫對應的 Core Data 文件。在整個過程中，開發者只需要專注於將 vCard 檔案轉換為 Core Data 實體的過程，而不需關心例如資料的顯示、合法性檢查、儲存等其它部分，提高了開發效率。

Core Data is organized into a large hierarchy of classes, though interaction is only prevalent with a small set of them. 
Core Data 由相對龐大的類繼承體系組成，但開發者需要關注的介面只是其中的一個相對小的子集。

## 儲存格式

Core Data 可以將資料儲存為 XML，二進位檔案或 SQLite 檔案。在 Mac OS X 10.5 _Leopard_ 及以後的版本中，開發者也可以通過繼承 NSPersistentStore 類以建立自訂的儲存格式。每種方法都有其優缺點，例如 XML 的可讀性，SQLite 的節約空間等。Core Data 的這一方面類似於原始的 Enterprise Objects Framework（EOF）系統，但 EOF 中開發者可以使用相對簡潔的查詢方式，而在 Core Data 中，只能使用一個語法類似 SQL 子集的查詢語言，稱為 Predicate。

Core Data 是標準化的，可以自由的讀寫 Xcode 資料模型檔案（通常是.xcdatamodel 檔案）。與 EOF 不同，Core Data 目前沒有設計多使用者或多執行緒存取模式。模型遷移通常也需要代碼，若其它開發者依賴於某個資料模型，則該資料模型的設計者可能在模型發生改變時需要與新資料模型一起提供版本轉換代碼。

## 歷史與發展

Core Data 的很大一部分設計都歸功於早期的 NeXT 產品，Enterprise Objects Framework（EOF）。

## 註腳

## 參考文獻

* 蘋果公司 (2009 年 9 月 17 日). "Core Data Programming Guide". Retrieved from http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html（頁面存檔備份，存於網際網路檔案館）
* 蘋果公司 (2009 年 9 月). "Core Data Tutorial for iPhone OS". Retrieved from https://web.archive.org/web/20100323200755/http://developer.apple.com/iPhone/library/documentation/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html
* 蘋果公司 (2010 年 6 月 14 日). _Predicate Programming Guide_. 來自 [1]（頁面存檔備份，存於網際網路檔案館）
* 蘋果公司 (2006 年). "EOModeler User Guide". Retrieved from http://developer.apple.com/legacy/mac/library/documentation/WebObjects/UsingEOModeler/Introduction/Introduction.html#//apple\_ref/doc/uid/TP30001018-CH201-TP1（頁面存檔備份，存於網際網路檔案館）
* Jurewitz, M. & Apple Inc. (2010). "iPhone Development Videos: Working With Core Data". Retrieved from http://developer.apple.com/videos/iphone/#video-advanced-coredata（頁面存檔備份，存於網際網路檔案館）
* Stevenson, S. (2005). "Core Data Class Overview". Retrieved from http://cocoadevcentral.com/articles/000086.php（頁面存檔備份，存於網際網路檔案館）
* Zarra, M. S. (2009). _Core Data Apple's API for Persisting Data on Mac OS X_. The Pragmatic Programmers.
* LaMarche, J., & Mark, D. (2009). _More iPhone 3 Development: Tackling iPhone SDK 3_. Apress.

## 外部連結

* Apple Inc. (2006). "Developing With Core Data". Retrieved from http://developer.apple.com/macosx/coredata.html（頁面存檔備份，存於網際網路檔案館）
* Apple Inc. (2009). "Web Objects Tutorial". Retrieved from http://developer.apple.com/legacy/mac/library/documentation/DeveloperTools/Conceptual/WOTutorial/Introduction/Introduction.html（頁面存檔備份，存於網際網路檔案館）
* CocoaDev. (n.d.). Retrieved from https://web.archive.org/web/20080801025517/http://www.cocoadev.com/
* Stevenson, S. (2005). "Build A Core Data Application". Retrieved from http://cocoadevcentral.com/articles/000085.php（頁面存檔備份，存於網際網路檔案館）