Core Data 的主要功能是管理資料的持久性、序列化、物件生存期及物件圖的管理。它允許開發者以高層物件的方式來運算資料，並提供了一個代表實體及其間關係的資料模型，使開發者能夠在純物件層次上尋找及管理資料，而不必操心儲存及查詢的具體實現細節。

Core Data 如何簡化開發者在資料管理上的工作，主要體現在以下幾個方面：

1. **高層物件管理**：開發者可以使用物件來代表資料的實體，通過簡單的屬性和方法來讀取和寫入資料，避免直接操作底層資料儲存格式（如 SQL 語句）。

2. **內建資料驗證與狀態管理**：Core Data 自動管理資料的合法性檢查，當資料變更時能夠避免不合法的狀態，這減少了開發者需要撰寫的驗證代碼量。

3. **與介面整合**：Core Data 可以與 Interface Builder 結合，使得 GUI 可以直接連接到資料模型，進一步簡化資料的顯示和修改，減少了需要編寫的自訂代碼。

4. **控制資料存取**：Core Data 使得開發者能夠專注於資料的業務邏輯，不必關注資料的持久化和查詢的底層實現，這在提升開發效率上是非常重要的。

總體而言，Core Data 透過簡化資料模型的創建和管理，讓開發者可以更聚焦於應用程序的邏輯，而減少在資料管理方面的時間與精力投入。
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（頁面存檔備份，存於網際網路檔案館）
## 核心功能

.NET Core 是由許多專案所組成，除了基本的類別庫 (Core FX) 之外，也包含採用 RyuJIT 編譯的執行平台 Core CLR、編譯器平台 .NET Compiler Platform、採用 AOT 編譯技術運行最佳化的套件 Core RT (.NET Core Runtime)，以及跨平台的 MSIL 編譯器 LLILC (LLVM-based MSIL Compiler) 等專案。

同時，微軟也發展了一個建置技術檔案的平台 docfx ，並運用於 .NET Core 的檔案網站。

### RyuJIT

RyuJIT 是微軟發展的新式即地編譯器 (Just-in-Time Compiler)，用以取代現有的 .NET Framework 的 JIT 以及 JIT64 即地編譯器，依據微軟公佈的測試報告，RyuJIT 的效能較前一代的 JIT 提升約 25%，並支援 SIMD (Single Instruction, Multiple Data) 的技術。RyuJIT 同時應用於 .NET Framework 4.6 以及 .NET Core。

### Core CLR

Core CLR 移植 .NET Framework 的 CLR 的功能，包含核心程式庫 mscorlib、JIT 編譯器、垃圾收集器 (GC) 以及其他執行 MSIL 所需要的執行期環境。

### Core RT

Core RT 是以 預先編譯為主的核心功能，在 .NET Core 內稱為 Core RT，在 UWP 則是稱為 .NET Native。

Core RT 會在建造時期 (非執行期) 在編譯時將 MSIL 轉換成平台原生的機器碼，以獲取較短的啟動時間 (JIT 採用的是執行時期編譯，使得啟動時間拉長)，以及記憶體用量減少的優點。Core RT 會在不同的平台使用不同的 AOT 技術：

* Windows 上使用的是 .NET Native。
* Mac OS 與 Linux 上使用的是 LLILC (同時支援 JIT 和 AOT)。 **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 曾說： **.NET** (3.1 版以前稱作**.NET Core**) 是微軟開發的第一個跨平台 (Windows、Mac OSX、Linux）的應用程式開發框架（Application Framework），未來也將會支援 FreeBSD 與 Alpine 平台。.Net Core 也是微軟在一開始發展時就開源的軟體平台，它經常也會拿來和現有的開源 .NET 平台 Mono 比較。

由於 .NET Core 的開發目標是跨平台的 .NET 平台，因此 .NET Core 會包含 .NET Framework 的類別庫，但與 .NET Framework 不同的是 .NET Core 採用套件化 (Packages) 的管理方式，應用程式只需要取得需要的組件即可，與 .NET Framework 大包式安裝的作法截然不同，同時各套件亦有獨立的版本線 (Version line)，不再硬性要求應用程式跟隨主線版本。

.NET Core 專案的主要目標有 ：

1. 支援或可以移轉 (port) 到更多的作業系統平台與晶片架構 (也就是未來計畫會跨出 x86 平台)。
2. 具有引人注目的效能與高可靠度。
3. 開發人員能快速與直覺的獲取 .NET Core 開發環境。
4. 在直覺與具生產力的情況下建造應用程式，使用檔案，範例與 NuGet 元件。

## 歷史

.NET Core 1.0 於 2016 年 6 月 27 日釋出。

2020 年 11 月，微軟釋出了 .NET 5.0，統一了.NET 的各個平台的碎片版本： .NET Framework 4.8, .NET Standard, .NET Core 3.1, Mono, Xamarin 等。

2021 年 11 月，微軟釋出了 .NET 6.0 。

2022 年 11 月，微軟釋出了 .NET 7.0 。 ## 使用方法

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 由相對龐大的類繼承體系組成，但開發者需要關注的介面只是其中的一個相對小的子集。