iOS開發(fā) - 關(guān)于 CoreData 的使用

簡介:

  • 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類, 可以通過一些操作, 制動生成.
工作原理:
  1. NSManagedObjectContext 臨時數(shù)據(jù)庫 向**NSPersistentStoreCoordinator ** 持久化存儲助理 發(fā)送一個key(model名字)
  2. NSPersistentStoreCoordinator 通過這個key 在 NSManagedObjectModel 數(shù)據(jù)模型中 找到這個model 對應(yīng)的 表
  3. NSManagedObjectModel 將這個表名 返回給 NSPersistentStoreCoordinator
  4. NSPersistentStoreCoordinator 通過 表名 找到 給表的 file 路徑
  5. ** NSPersistentStoreCoordinator ** 將這個路徑 返回給 NSManagedObjectContext
  6. NSManagedObjectContext 對 數(shù)據(jù)進(jìn)行 處理(增, 刪 , 該, 查)
  7. **NSManagedObjectContext **
    保存數(shù)據(jù) save
使用步驟:
  1. 創(chuàng)建模型文件:一個模型文件相當(dāng)于一個數(shù)據(jù)庫.


  2. 添加實(shí)體: 一個實(shí)體相當(dāng)于一個表.(點(diǎn)擊下面add entity 添加表, 點(diǎn)擊atttibutes的+號 添加屬性)

  3. 創(chuàng)建實(shí)體類: 相當(dāng)于模型類model.


  4. 生成上下文, 來關(guān)聯(lián)模型文件生成數(shù)據(jù)庫
    生成上下文時, 如果有多個數(shù)據(jù)庫,且生成多個數(shù)據(jù)庫文件時, 要使用不同的上下文進(jìn)行操作.

  5. 從數(shù)據(jù)庫查詢對象
    過濾查詢, 排序查詢, 分組查詢等等

  6. 更新數(shù)據(jù)
    前提: 先查詢, 再修改數(shù)據(jù)

  7. 刪除數(shù)據(jù)
    前提: 先查詢, 再刪除數(shù)據(jù)

  8. 多表關(guān)聯(lián)
    在relationships添加與其他表的關(guān)聯(lián)
    注意: 添加完關(guān)聯(lián)后, 該表的實(shí)體類要刪除重新生成


  9. 多個數(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 的對比:
  1. sqlite是純C語言存儲方式.
  2. CoreData是對sqlite的封裝, 它的數(shù)據(jù)的保存直接使用對象, 不用再寫sql語句.
  3. 性能方面: sqlite 優(yōu)于 CoreData
  4. 什么時候使用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/


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容