1.1-首先談一下什么是CoreData?
coreData是ios5之后蘋果原生用于對象數據管理并且持久化(存儲在磁盤)的框架(如果說直白一點它就是擁有了數據庫一樣的存儲數據功能,但它本身并不是數據庫)
1.2-coreDataStack的原理
一共有三個類 來完成數據的增刪改查.
->NSManagerObjectContext 對象管理的上下文 它可以直接操作 NSPersistentStoreCoordinator(存儲調度器:也就是調度存儲數據的)
->NSPersistentStoreCoordinator 存儲調度器 如果有對象要存儲,那么它負責 "呼叫"存儲器來將對象進行存儲到數據庫中.
->NSManagerObjectModel 被管理的對象模型:負責管理對象模型(如果有對象進行保存,那么就先經過NSManagerObjectModel裝飾一下,便于NSPersistentStoreCoordinator來調度存儲到數據庫中)
最后數據庫(SQLite)將數據通過fileSystem 存入磁盤中,這就是coreData框架將數據存儲到磁盤的全部步驟!
1.3-我們為什么要使用coreData?
1.首先coreData是將底層數據庫封裝成了對象給我們使用(注:數據庫只是coreData的功能之一,并不是全部),coreData的使用并不需要繁瑣的SQL的語句更能體現蘋果面向對象的思想.
2.談下一下它與SQL對比
->對象的復用大大提高了數據使用的性能,比起sql直接操作數據庫效率提高的多得多. 打個比方:當你要訪問一個對象,而這個對象已經在context中存在那么就直接可以調用,這樣的操作幾乎不消耗任何性能.如果對象不是存在context中,如果最近在store中取出過該對象,存儲協調器緩存了這個對象,這種操作效率還行.如果既不在context中大,又不在store中那么,那么操作效率就會相對低一些.
1.4-為了簡單的使用coreData框架 我將其簡單的封裝了一下
1.定義一個管理數據存儲的類
```
@interface WWCoreDataStackManager : NSObject
```
2.定義三個coreData用到三個屬性@property(nonatomic,strong)NSManagedObjectContext * managerObjectContent;
@property(nonatomic,strong)NSManagedObjectModel * managerObjectModel;
@property(nonatomic, strong)NSPersistentStoreCoordinator * persistentStoreCoordinator;
對外提供了一個保存數據的方法
-(void)save;
在.m文件中 寫一個類的單例能讓我們更好的使用這個類
+(WWCoreDataStackManager*)ShareCoreDataStackManager{
static WWCoreDataStackManager* instancetypes;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instancetypes = [WWCoreDataStackManager new];
});
return instancetypes;
}
分別對三個屬性進行懶加載
-(NSManagedObjectContext *)managerObjectContent{
if(_managerObjectContent != nil){
return _managerObjectContent;
}
_managerObjectContent = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSMainQueueConcurrencyType];
[_managerObjectContent setPersistentStoreCoordinator:self.persistentStoreCoordinator];
return _managerObjectContent;
}
-(NSPersistentStoreCoordinator *)persistentStoreCoordinator{
if (_persistentStoreCoordinator != nil){
return _persistentStoreCoordinator;
}
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:self.managerObjectModel];
NSURL * url = [[self doucumentURL]URLByAppendingPathComponent:[NSString stringWithFormat:@"sqlit.db"] isDirectory:YES];
NSError * error = nil;
[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error];
if (error){
NSLog(@"%@",error);
}
return _persistentStoreCoordinator;
}
-(NSManagedObjectModel *)managerObjectModel{
if(_managerObjectModel != nil){
return _managerObjectModel;
}
_managerObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
return _managerObjectModel;
}
//寫save方法
-(void)save{
[self.managerObjectContent save:nil];
}
注:在初始化NSPersistentStoreCoordinator 要告訴存儲的路徑 所以做了拼接URL的操作
如果你還想封裝的更簡便的話 可以直接將單例 宏定義一下
先寫到這里,下次再封裝一下,怎么將存儲數據庫中數據一次性全部刪除