什麼是CoreData?

原文程序員

簡介

Core Data是個框架(並非數據庫哦),它使開發者能夠把數據當作對象來操做,而沒必要在意數據在磁盤中的存儲方式。對於iOS程序員來講,這頗有用,由於咱們已經能夠經過代碼很是熟悉的操做對象了。由Core Data 所提供的數據對象叫作託管對象(Managed Object),而Core Data自己則位於你的應用程序和持久化存儲區(Persistent store)之間。爲了把數據從託管對象映射到持久化存儲區中,Core Data 須要使用託管對象模型。全部的託管對象都必須位於託管對象上下文(Managed object context)裏面,而託管對象上下文又位於高速的易失性存儲器裏面,也就是位於RAM中。數據庫

爲何須要有託管對象上下文呢?緣由之一就是在磁盤與RAM之間傳輸數據時會有開銷。磁盤讀寫速度比RAM慢的多,因此不該該頻繁地訪問它。有了託管對象上下文,就能夠很是迅速地獲取到了。但它的缺點在於,開發者必須在託管對象上下文上面按期調用save方法,以將變動後的數據寫回磁盤。託管對象上下文的另外一個功能是記錄開發者對託管對象所對的修改,以提供完整的撤銷和重作支持。網絡

上邊咱們對Core Data簡單的介紹了一下。接下來咱們須要對CoreData中的重要的名詞作一解釋。數據結構

持久化存儲協調器

持久化存儲協調器(persistent store coordinator)裏面包含一份持久化存儲區,而存儲區裏面又含有數據表裏面的若干行數據。設置持久化存儲協調器的時候,咱們一般選用SQLite數據庫做爲持久化存儲區。另外,也能夠選用Binary、XML、或In-Memory等形式的持久化存儲區。但要注意的是,Binary和XML格式的存儲區是Atomic,也就是說,即使你只想修改少許的數據,在保存的時候也依然須要把整個文件都寫入磁盤。框架

同一個持久化存儲協調器能夠有多個持久化存儲區。把CoreDataiCloud相集成的時候,就可能會出現這樣的狀況。咱們能夠把不屬於iCloud的數據放在一個存儲區裏面,而把屬於iCloud的數據放在另一個存儲區裏面,這樣既能節省網絡寬帶,又能節省iCloud存儲空間。異步

即使你有兩個持久化存儲區,也不意味着必須使用兩種對象圖。CoreData的模型配置容許開發者使用多個獨立的存儲區,但卻採用同一套對象圖。在設置CoreData的模型配置選項時,能夠指明對象圖裏面的某一部分屬於哪個持久化存儲區.net

要想建立持久化存儲區,需生成NSPersistentStore;要想建立持久化存儲協調器,需生成NSPersistentStoreCoordinator類的實例。code

託管對象模型

託管對象模型它位於持久化存儲協調器託管對象上下文直間。顧名思議,託管對象模型是描述數據結構的模型或者圖示,而託管對象正是以它爲基礎產生出來的。能夠用Xcode來配置實體(Entity)及實體之間的關係。實體自己並不包含數據,它們只是規定了基於該實體的託管對象具備何種特性。實體也有屬性,屬性的數據類型能夠是整數,字符串,或者日期等。對象

要想建立託管對象模型,須要生成NSManagedObjectModel類的實例。內存

託管對象上下文

託管對象上下文中可包含多個託管對象。託管對象上下文負責管理其中對象的生命期,而且負責提供許多強大的功能。

託管對象上下文也能夠不止有一個,有時咱們須要在後臺處理任務(比方說把數據保存到磁盤或者導入數據),這種狀況下能夠採用多個上下文。加入在前臺上下文上面調用Save,那麼用戶界面就可能會有卡頓現象,尤爲當數據變化較大的時候更是如此。要想避免這個問題,有個簡單的辦法就是隻在用戶按下手機的Home鍵時纔去調用Save,這時應用程序會轉入到後臺。還有個稍微複雜的但卻很靈活的辦法,就是採起兩個託管對象上下文。請記住,託管對象上下文是存放在高速內存裏面的。你能夠配置其中一個上下文,那麼就能夠將後臺上下文種的數據異步存入磁盤。這種分段式的作法能夠確保磁盤寫入操做不會影響用戶界面的流暢度。

要想建立託管對象上下文,須要生成NSManagedObjectContext類的實例

先介紹到這裏,至於CoreData的具體操做以後的博客裏再去介紹。

相關文章
相關標籤/搜索