Core Data學習筆記

1.Core Data提供通用及自動化的對象生命週期管理方案,包括持久化,其特點包括:
1)undo/redo支持;
2)對象間的關係管理;
3)懶加載和寫拷貝等內存高效使用方式;
4)屬性值的自動校驗;
5)schema遷移;
6)NSFetchedResultsController與UITableView是一對好基友,可與界面深度結合;
7)KVC/KVO自動支持;
8)對數據進行篩選和分組;
9)支持SQL功能的語法,使用NSPredicate可支持高級查詢及各種函數;
10)通過內置的版本跟蹤實現多個與請求時的衝突解決方案;
2.Core Data的幾大模塊內容:
1)Managed Object Model,數據模型的描述,包括實體、屬性以及Fetch Request等;
2)Managed Object Context,參與對數據對象進行操作的全過程,包括監測和支持undo/redo操作;
3)Persistent Store Coordinator,相當於數據文件管理器,處理底層的對數據文件的讀取與寫入;
4)Managed Object,數據對象,與Managed Object Context相關聯;
5)Controller,controller可以與Managed Object Context綁定,使controller的內容來自對應的Context;
3.使用Core Data的步驟:
1)使用xcdatamodeld文件圖形界面定義entity並生成相應的類;
2)在app delegate中初始化三個對象:將1文件定義的內容生成managedObjectModel對象==>使用managedObjectModel對象初始化persistentStoreCoordinator對象==>使用persistentStoreCoordinator對象初始化managedObjectContext對象;
3)今後所有的操作都只針對managedObjectContext對象即可;
4.獲取數據通過NSFetchedResultsController進行,給它一個fetchRequest參數,裏面包括要查找的實體等約束,調用performFetch即可;數據的增刪改查都可通過NSFetchedResultsController的代理得到回調,回調包括對象和對象的位置下標,從而進行相應的界面響應;
5.[NSEntityDescription insertNewObjectForEntityForName:@"Book" inManagedObjectContext:addingContext]方法可以在Context中增加對象,調用[addingManagedObjectContext save:&error]可以保存;
6.使用[context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]]可刪除對象;

7.[managedObject setValue:self.datePicker.date forKey:self.editedFieldKey];可修改對象的值,而且此方法會觸發KVO相關邏輯;這也是爲什麼Core Data的屬性用dynamic修飾的原因;

8.本身managedObjectContext和persistentStoreCoordinator等對象都不支持跨線程操作,但可通過建立多個managedObjectContext並指定彼此parent的方式關聯,而多個context可分別指定不同的併發類型,在不同的線程中操作,它們可以關聯同一個persistentStoreCoordinator,因爲persistentStoreCoordinator使用之前會有鎖,這樣可間接實現多線程,NSManagedObjectContextDidSaveNotification可接收其它context保存了數據的通知。

9.Core Data有兩種數據遷移的辦法,第一種是輕量遷移,對於只增加字段或實體等簡單的修改,可以存儲coordinator的時候設置對應的屬性;第二種是標準遷移,需要設置一些Mapping來實現字段增刪改等的遷移,這塊沒有深入,只能說如果有使用一core data時,儘量設計得全一些,如果需要面對遷移的情況,參照蘋果官方文檔:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreDataVersioning/CoreDataVersioning.pdf。

10.nil和NULL的區別:從代碼層面來說,這兩個內容都表示空,也都表示數字0,是100%可以互換的,但從概念上還是要區分,nil用來和oc對象比較,NULL用來和指針比較。

11.Transformable attribute是指現有core data中基本支持的數據字段類型只有字符串,數值等幾種,如果需要存儲自定義的類型或一些複雜的技術類型,則需要將這些對象轉化爲NSData之後再存儲,這個轉換過程由NSValueTransformer或其子類的實例來實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章