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"

參考文獻

外部連結