1. 基本概念數據庫
Core Data是一種被稱爲對象關係映射(Object-Relational Mapping,ORM)技術的實現。編程
Core Data 架構圖以下:數據結構
五個概念:架構
(1)數據模型(Data Model)app
(2)持久化存儲(Persistent Store)spa
(3)持久化存儲Corrdinator設計
(4)Managed Object和Managed Object上下文指針
(5)Fetch Request對象
2 數據模型blog
數據模型定義了對象的數據結構、對象的組織方式、對象之間的關係,以及對象的行爲。
1. 實體
Core Data的實體能夠看做OC中類聲明相似的東西,使用實體時,能夠看成使用一個OC類。
(1)特徵(Property)
實體擁有3種特徵:
a. Attributes(屬性)
b. Relationships(關係)
c. Fetched Properties(提取屬性)
(2)Attributes(屬性)
Attributes在實體中的做用與OC類的變量實例相同——它們都用來裝載數據。每一個Attribute都有本身的類型。
(3)Relationships(關係)
Relationships定義了兩個實體之間的關係。
Relationships能夠一對一也能夠一對多,而且始終須要鏈向某個特定的對象。
從OC的角度講,一對一關係相似某個變量實例保存了指向另外一個OC類實例的指針,而一對多關係則如同保留了一個指向諸如NSMutableArray或者NSSet這樣的集合類的指針,它們能夠容納多個對象。
(4)Fetched Properties(提取屬性)
Fetched Properties相似由某個已有對象發起的查詢。
2. Fetch Requests(提取請求)
Fetched Property相似由某個已有對象發起的查詢,那麼Fetch Request則更接近對一個查詢的類方法封裝。
3. Configuration(配置)
Configuration是一組實體。不一樣的Configuration能夠包含相同的實體。Configuration用來定義那些實體存儲在哪一個持久化存儲中。
4. 數據模型類:NSManagedObjectModel
NSManagedObjectModel類表明內存中的數據模型。
能夠把多個.xcdatamodel文件聯合起來組成一個NSManagedObjectModel實例,從而爲從多個文件中獲取的全部實體建立一個數據模型。
合併main bundle中的全部.xcdatamodel未一個NSManagedObjectModel實例:
_managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
5. 持久化存儲和持久化存儲助理
持久化存儲,有時又稱爲後背存儲(Backing Store),是Core Data用於存儲數據的地方。
默認狀況下,iOS設備上的Core Data使用應用程序Documents文件夾下的SQLite數據庫爲其持久化存儲。
持久化存儲並不禁OC類來呈現,而是經過NSPersistentStoreCoordinator控制器來進行訪問。本質上,它接受來自各類不一樣類對持久化存儲的讀取和寫入觸發,而且對這些訪問加以隊列化(Serialize)以保證相同時間不會有多個針對同一文件的調用,不然可能會觸碰到文件或數據庫死鎖。
除了使用持久化助理(Persistent Store Coordinator)來進行存儲的建立和與磁盤特定位置及數據模型相關聯外,不多會直接使用它。相反,常常會用到的是一些高層Core Data調用,以後Core Data將負責與持久化存儲助理進行交互以提取或寫入數據。
6. 獲取數據模型
持久化存儲是iOS設備文件系統中的一個文件,它能夠是SQLite數據庫,也能夠是普通二進制文件。
數據模型文件包含在一個或多個帶有。xcdatamodel擴展名的文件中,它描述了應用程序數據的結構。
數據模型告訴持久化存儲助理持久化存儲中存儲的全部數據的類型。
而持久化存儲助理則提供其餘Core Data類用於保存、提取和搜索數據。
3. Managed Object
實體定義了數據的結構,但它們並無實際地持有任何數據,而真正的數據實例被稱爲Managed Object(管理對象或受控對象)。
在Core Data中處理的任何一個實體的實例都是NSManagedObject對象或者子類對象。
4. 鍵值(Key-Value)編程
與NSDictionary類類似,NSManagedObject支持一些與鍵值操做相關的方法,如valueForKey:和setValue:forKey:用於設置或獲取屬性值。
Core Data使用KVC來向Managed Object存儲數據以及從其中獲取數據。
KVC還包含Keypath這一律念。Keypath可以實現僅經過一條字符串,就能夠遍歷對象的層級結構。
NSString *employerName = [managedObject valueForKeyPath:@"whereIWork.name"];
5. Managed Object 上下文
Core Data包含一個對象,它創建了你的實體和Core Data其他部分之間的橋樑,它被稱做Managed Object上下文(Context),一般稱做「上下文」。
上下文維護着載入或者建立的全部Managed Object的狀態,它還記錄了Managed Object從上次保存或載入以後發生的改變。當你想要載入或搜索對象時,能夠經過上下文來完成;當你想要將修改提交給持久化存儲時,能夠保存上下文;若是想撤銷對某個Managed Object的修改,則僅僅須要請求上下文來實現。(沒錯,它處理了全部對數據模型實現撤銷和重作操做的處理。)
(1)退出時保存
(2)從持久化存儲載入數據
(3)Fetched Results Controller
NSFetchedResultsController被設計用於處理一個特定的工做,即管理從Core Data的Fetch Request返回的對象。若是指定了Delegate,那麼底層數據發生變化時,Delegate將會得到通知。