The managed object model
NSManagedObjectModel表示app中每個物件類型的數據模式
Note:NSManagedObjectModel是怎麼聯繫數據模式的?我們可以在Xcdoe上創建與編輯xcdatamodel這個文件,有一個特別的compiler(編譯器)叫momc,它complies model文件成為一套文件,然後放進一個momd資料夾中。
Core Data用momd資料夾中的內容在runtime初始化NSManagedObjectModel
The persistent store
atomic persistent store一定要加載到記憶體中才能提供讀寫
non-atomic persistent store可以根據需求加載到記憶體中
四個內建的Core Data儲存類型:
1.NSQLiteStoreType:
- SQLite類型
- 是唯一Core Data支援的non-atomic儲存類型
- 因為其輕量與高效的記憶體佔用特性,是iOS專案的最佳選擇,也是Xcode的Core Data預設儲存類型
2.NSXMLStoreType:
- XML類型
- atomic儲存類型
- 佔用大量的記憶體位置
- 只在OS X上可用
3.NSBinaryStoreType:
- 幾乎很少用
4.NSInMemoryStoreType:
- 關掉App或重開機資料就會消失
- 可以用在unit testing和某些caching上
Note:若要使用JSON或是CSV檔案可以subclassing NSIncrementalStore來創立自己的想要的類型
The persistent store coordinator
- NSPersistentStoreCoordinator是managed object model和persistent store之間的橋樑
- 負責用model和persistent stores來完成大部分Core Data的工作
- 瞭解如何傳遞資訊給NSManagedObjectModel和從NSPersistentStore擷取資訊
NSPersistentStoreCoordinator隱藏了persistent store執行時設置的細節,這有兩個原因:
1.NSManagedObjectContext不用知道是儲存SQLite資料庫, XML文件或是自訂的儲存格式
2.如果有多個persistent stores,它提供managed context統一的接口
The managed object context
NSManagedObjectContext是這次Core Data學習中最常會接觸到的,其他三個只有在進階的Core Data使用才會用到
- context是一個在記憶體中的暫存器,用來處理要管理的物件
- 所有Core Data的工作都要用到managed object context
- 任何操作都要直到呼叫save()才會影響到硬碟裡的檔案
關於contexts的五件事情:
1.context管理managed objects(受管理物件)的創造、擷取的生命週期,這個生命週期管理的功能包含faulting(故障),inverse relationship handling(反向關係管理)和validation(認證)
2.一個managed object必然會和context相關連,managed objects和context關係緊密,以致於每個managed object都保有一個context的reference
例如:
let managedContext = employee.managedObjectContext
3.context的佔有欲很強(供殺毀),當一個managed object與特定的context相關連後,他會在生命週期中與其保持關連
4.一個應用可以使用不只一個context,大部分的Core Data應用都是如此類型。你可以在兩個不同的contexts上同時讀取一樣的Core Data物件
5.context並非thread-safe(線程安全)的,managed object也是一樣,contexts和managed object必須要在它們被創建的線程上作用
The persistent store container
NSPersistentContainer是iOS10的新玩意兒,集4種Core Data stack:
- the managed model
- the store coordinator
- the persistent store
- the managed context
於一身,現在可以簡單的初始化NSPersistentContainer,讀取persistent stores,就可開始操作Core Data
練習專案:Dog Walk