Core Data
Core Data是蘋果公司所開發的macOS作業系統(舊稱:Mac OS X及OS X)中Cocoa API的一部分,首次在Mac OS X 10.4 Tiger與iOS 3.0系統中出現[1]。它允許按照實體-屬性-值模型組織數據,並以XML,二進制檔案或SQLite數據檔案的格式將其序列化。Core Data允許用戶使用代表實體和實體間關係的高層對象來運算元據。它也可以管理序列化的數據,提供對象生存期管理與object graph管理,包括儲存。Core Data直接與SQLite互動,避免開發者使用原本的SQL陳述式[2]。
開發者 | 蘋果公司 |
---|---|
作業系統 | macOS、iOS |
許可協定 | 專有 |
網站 | Apple Developer Documentation |
就像Cocoa繫結在模型-視圖-控制器設計中做了很多控制器的工作一樣,Core Data做了很多數據模型的工作。它的主要任務是負責數據更改的管理,序列化到磁碟,最小化主記憶體佔用,以及查詢數據。
專長於Core Data及Cocoa軟件開發的資訊圖書作家Marcus Zarra曾說:
“ | 簡單的說,Core Data就是可以儲存到磁碟的對象圖,[...]Core Data可以幫我們做很多工作。它可以作為軟件的整個模型層。它不僅僅在磁碟上儲存數據,也把我們需要的數據對象讀取到主記憶體中。[3] | ” |
使用方法
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 |
|
|
NSManagedObjectContext |
|
|
NSManagedObjectModel |
|
|
NSFetchRequest |
|
|
NSPersistentStoreCoordinator |
|
|
NSPredicate |
|
|
儲存格式
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]。
註腳
參考文獻
- 蘋果公司 (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(頁面存檔備份,存於互聯網檔案館)