
簡介:
- CoreData 是數(shù)據(jù)持久化存儲的最佳方式.
- CoreData 是基于 sqlite 的封裝, 數(shù)據(jù)保存到一個數(shù)據(jù)庫文件中(表).
- iOS5 以后才出現(xiàn).
- 它提供了對象-關(guān)系映射(ORM)的功能, 既能夠?qū)c對象轉(zhuǎn)化成數(shù)據(jù)保存在sqlite文件中, 也能將保存在數(shù)據(jù)庫中的數(shù)據(jù)還原成oc對象.
- 數(shù)據(jù)操作期間, 我們不需要編寫任何的sql語句.
- 數(shù)據(jù)最終的存儲類型可以是:SQLite數(shù)據(jù)庫,XML,二進(jìn)制,內(nèi)存里,或自定義數(shù)據(jù)類型.
- 好處:能夠合理管理內(nèi)存,避免使用sql的麻煩, 更高效. 不需要我們手動去創(chuàng)建model類, 可以通過一些操作, 制動生成.
工作原理:
- NSManagedObjectContext 臨時數(shù)據(jù)庫 向**NSPersistentStoreCoordinator ** 持久化存儲助理 發(fā)送一個key(model名字)
- NSPersistentStoreCoordinator 通過這個key 在 NSManagedObjectModel 數(shù)據(jù)模型中 找到這個model 對應(yīng)的 表
- NSManagedObjectModel 將這個表名 返回給 NSPersistentStoreCoordinator
- NSPersistentStoreCoordinator 通過 表名 找到 給表的 file 路徑
- ** NSPersistentStoreCoordinator ** 將這個路徑 返回給 NSManagedObjectContext
- NSManagedObjectContext 對 數(shù)據(jù)進(jìn)行 處理(增, 刪 , 該, 查)
- **NSManagedObjectContext **
保存數(shù)據(jù) save
使用步驟:
-
創(chuàng)建模型文件:一個模型文件相當(dāng)于一個數(shù)據(jù)庫.
-
添加實(shí)體: 一個實(shí)體相當(dāng)于一個表.(點(diǎn)擊下面add entity 添加表, 點(diǎn)擊atttibutes的+號 添加屬性)
-
創(chuàng)建實(shí)體類: 相當(dāng)于模型類model.
生成上下文, 來關(guān)聯(lián)模型文件生成數(shù)據(jù)庫
生成上下文時, 如果有多個數(shù)據(jù)庫,且生成多個數(shù)據(jù)庫文件時, 要使用不同的上下文進(jìn)行操作.從數(shù)據(jù)庫查詢對象
過濾查詢, 排序查詢, 分組查詢等等更新數(shù)據(jù)
前提: 先查詢, 再修改數(shù)據(jù)刪除數(shù)據(jù)
前提: 先查詢, 再刪除數(shù)據(jù)-
多表關(guān)聯(lián)
在relationships添加與其他表的關(guān)聯(lián)
注意: 添加完關(guān)聯(lián)后, 該表的實(shí)體類要刪除重新生成
多個數(shù)據(jù)庫
生成上下文時, 如果有多個數(shù)據(jù)庫,且生成多個數(shù)據(jù)庫文件時, 要使用不同的上下文進(jìn)行操作.
構(gòu)成:
(1)NSManagedObjectContext(被管理的數(shù)據(jù)上下文)
操作實(shí)際內(nèi)容(操作持久層) 臨時數(shù)據(jù)庫
作用:插入數(shù)據(jù),查詢數(shù)據(jù),刪除數(shù)據(jù)
(2)NSManagedObjectModel(被管理的數(shù)據(jù)模型)
數(shù)據(jù)庫所有表格或數(shù)據(jù)結(jié)構(gòu),包含各實(shí)體的定義信息 數(shù)據(jù)模型
作用:添加實(shí)體的屬性,建立屬性之間的關(guān)系
操作方法:視圖編輯器,或代碼
(3)NSPersistentStoreCoordinator(持久化存儲助理)
相當(dāng)于數(shù)據(jù)庫的連接器
作用:設(shè)置數(shù)據(jù)存儲的名字,位置,存儲方式,和存儲時機(jī)
(4)NSManagedObject(被管理的數(shù)據(jù)記錄)
相當(dāng)于數(shù)據(jù)庫中的表格記錄
(5)NSFetchRequest(獲取數(shù)據(jù)的請求)
相當(dāng)于查詢語句 查詢時 要建立請求對象
(6)NSEntityDescription(實(shí)體結(jié)構(gòu))
相當(dāng)于表格結(jié)構(gòu)
(7)后綴為.xcdatamodeld的包
里面是.xcdatamodel文件,用數(shù)據(jù)模型編輯器編輯 . 編譯后為.momd或.mom文件
SQLiteManager工具:
-
Z_PK : 主鍵 ZDEPART: 外鍵
-
打開CoreData的sql語句:
按照下圖操作后, 使用CoreData時 會在控制臺輸出sql語句:
添加-com.apple.CoreData.SQLDebug 和 1 兩行
注意: 這兩行的順序如圖所示, 不能調(diào)換.
SQLite 和 CoreData 的對比:
- sqlite是純C語言存儲方式.
- CoreData是對sqlite的封裝, 它的數(shù)據(jù)的保存直接使用對象, 不用再寫sql語句.
- 性能方面: sqlite 優(yōu)于 CoreData
- 什么時候使用sqlite 和 CoreData?
如果數(shù)據(jù)庫表關(guān)聯(lián)比較復(fù)雜時, 三四張表都關(guān)聯(lián), 那就使用sqlite
如果數(shù)據(jù)庫表結(jié)構(gòu)比較簡單, 表之間沒有關(guān)系, 使用CoreData
GitHub: https://github.com/LiCheng244/LCUtils
個人博客: http://www.licheng244.com/






