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

Core Data
Core Data
開發者蘋果公司
作業系統macOSiOS
許可協定專有
網站Apple Developer Documentation

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

類名 用途 關鍵方法
NSManagedObject
  • 資料對象
  • 管理屬性
  • -entity
  • -valueForKey:
  • -setValue: forKey:
NSManagedObjectContext
  • 資料庫
  • 取得與儲存
  • -executeFetchRequest: error:
  • -save
NSManagedObjectModel
  • 資料模型
  • -entities
  • -fetchRequestTemplateForName:
  • -setFetchRequestTemplate: forName:
NSFetchRequest
  • 請求資料
  • -setEntity:
  • -setPredicate:
  • -setFetchBatchSize:
NSPersistentStoreCoordinator
  • 中介
  • 儲存資料
  • -addPersistentStoreWithType: configuration: URL: options: error:
  • -persistentStoreForURL:
NSPredicate
  • 確定查詢條件
  • +predicateWithFormat:
  • -evaluateWithObject:

[3][2][4][5]

儲存格式

編輯

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

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

歷史與發展

編輯

Core Data的很大一部分設計都歸功於早期的NeXT產品,Enterprise Objects Framework(EOF)[7]

註腳

編輯
  1. ^ Apple, "Core Data Tutorial for iPhone OS".
  2. ^ 2.0 2.1 2.2 Apple, "Core Data Programming Guide".
  3. ^ 3.0 3.1 Zarra, Core Data.
  4. ^ Stevenson, "Core Data類總覽"
  5. ^ Jurewitz, "使用Core Data"
  6. ^ Apple, Predicate Programming Guide
  7. ^ Apple, "EOModeler User Guide"

參考文獻

編輯

外部連結

編輯