CoreData入门简介

Core Data 基本构造

图片 1

NSManagedObject

NSManagedObject是被管制的多寡记录。对应着就是数据库的一个表,在我们适用
xCode 编辑完数据库的表结构从此可以透过xCode->Editor->Create
NSManagedObject Subclass…
来成立对应表的 model

先来介绍一下 CoreData 里面有些基础性的东西吗:

NSEntityDescription

NSEntityDescription相当于表结构。里面包蕴Attributes、Relationships、Fetched
Properties
三部分情节。也就是你在编制.ecdatamodeld右侧的三组内容

NSManagedObjectModel

NSManagedObjectModel能够把它看作为一个 Core Data 的
schema。生成这么些类的来自就是在 xCode
里的.xcdatamodeld文本,大家得以可视化的对这些文件进行操作,实际上这些文件也就一定于数据库的
schema,这一个文件编译后就是.momd.mom文件。大家得以根据这么些开首化NSManagedObjectModel

- (NSManagedObjectModel *)managedObjectModel{
    if (__managedObjectModel != nil) {
        return __managedObjectModel;
    }
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TestApp" withExtension:@"momd"];
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return __managedObjectModel;
}

CoreData 是 iOS3.0 时引入的一个数码持久化的框架。他与 sqlite
相比较最大的亮点莫过于扶助对象的贮存了,苹果的官方文档说其简化了数据库的操作(个人用起来感觉依然没有
FMDB 简单),使用 CoreData 确实可以大大方方缩减代码中的 SQL 语句。

简介

在应用中统筹数据量大的时候肯定要透过子线程来拓展数据库相关操作,那就涉嫌到线程安全题材了。其多线程下的施用那里有三中方案:

CoreData
三十二线程下NSManagedObjectContext的采用

须知道,CoreData的NSPersistentStoreCoordinatorNSManagedObjectContext目的都是不可以跨线程使用的,我们注意到:

- (id)initWithConcurrencyType:(NSManagedObjectContextConcurrencyType)ct

NSManagedObjectContextConcurrencyType 一共有二种:

  • NSConfinementConcurrencyType
  • NSPrivateQueueConcurrencyType
  • NSMainQueueConcurrencyType

NSPrivateQueueConcurrencyTypeNSMainQueueConcurrencyType分别对应绑定一个后台线程与主线程。能够采用performBlock:开执行原来须要选取dispatch_async装进的代码.

NSConfinementConcurrencyType无法实施performBlock:

NSManagedObjectContext是足以依照其余的NSManagedObjectContext的,通过setParentContext方式,可以设置别的一个NSManagedObjectContext为友好的父级,这些时候子级可以访问父级下所有的对象,而且子级NSManagedObjectContext的始末变更后,要是推行
save 方法,会活动的 merge 到父级NSManagedObjectContext中,也就是子级
save
后,变动会同步到父级NSManagedObjectContext。当然这么些时候父级也非得再
save
一遍,假如父级没有父级了,那么就会一向向NSPersistentStoreCoordinator中写入,假如有就会随着向再上一层的父级冒泡…

透过多少个级其余NSManagedObjectContext, 一个承受在 background
更新NSPersistentStoreCoordinator。一个用在主线程,主要实施插入,修改和删除操作,一些小的查询也得以在那里一起施行,要是有大的查询,就起一个新的NSPrivateQueueConcurrencyType类型的NSManagedObjectContext,然后放在后台去实施查询,查询完毕后将结果回到主线程。

其实那种三三十二线程的造访也就像 FMDB
FMDatabaseQueue,就是把数据库操作全体松开一个子线程中,然后所有的操作都最终调用那个子线程来施行

NSPersistentStoreCoordinator

NSPersistentStoreCoordinator是一个位于当地存储文件与缓存层(NSManagedObjectContext)之间的一个持久化层,他是实在操作数据库本地文件。

其开头化主要为多个步骤:

  • 用一度开头化好的NSManagedObjectModel去初步化它
  • 选取NSPersistentStore为存储的主意

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator{
    if (__persistentStoreCoordinator != nil) {
        return __persistentStoreCoordinator;
    }
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"TestApp.sqlite"];
    NSError *error = nil;
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    
    return __persistentStoreCoordinator;
}

NSPersistentStoreCoordinator的数据存储格局近来帮助几种:SQLite、二进制、XML

代码参考

下载

参考:

通则不痛,远离阻塞-在多线程环境中应用CoreData,以及一个大致的包裹

CoreData
四线程下NSManagedObjectContext的选取

Core
Data浅谈种类汇总

CoreData并发处理

参考

iOS学习笔记(30) Core
Data是怎么着保存的?

NSFetchRequest

NSFetchRequest就一定于是 SQL 里面的查询语句,大家利用它代表了 sql
语句。那些支撑谓词查询

NSManagedObjectContext

NSManagedObjectContext是一个被管制数据的上下文,他骨子里是对你富有数据库操作的一个缓存层,把您具备的操作都先缓存起来防止多量磁盘
IO
造成不流畅,你在操作完数据库后调用其save主意,就可以把你的数据库操作提交给持久化层(NSPersistentStoreCoordinator),由持久化层两回性写入数据库文件。起先化:

- (NSManagedObjectContext *)managedObjectContext{
    if (__managedObjectContext != nil) {
        return __managedObjectContext;
    }
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        __managedObjectContext = [[NSManagedObjectContext alloc] init];
        [__managedObjectContext setPersistentStoreCoordinator:coordinator];
    }
    return __managedObjectContext;
}

参考

iOS笔记(18)Core Data
(一)

iphone数据存储之-- Core
Data的行使(一)

Core
Data浅谈连串之一:基础结构

Core Data是怎么保存的

  • 当然是NSManagedObjectContext调用save方法的时候。
  • 那会儿候context里面装有的这么些NSManagedObject将会协调调用自己的willSave方法。
  • NSManagedObjectContextWillSaveNotification发出。
  • 始发验证。这几个声明可能是您在data
    model里面写的。也得以是在NSManagedObject里面代码写的。
  • 证实截止之后数据就集合到NSPersistentStoreCoordinator和NSPersistentStore里面。
  • 假如你在联合的时候改变了数额。那时候会重新验证数据。
  • 其一时候已经把要求验证过的碰面数据存到持久化介质当中。
  • 说到底NSManagedObjectContextDidSaveNotification那么些布告发出。

Core Data 多线程

网站地图xml地图