Concurrency with Core Data 案例学习

ThreadedCoreData 案例分析

该案例展示了Core Data在多线程中是如何使用的。这里使用了Thread Confinement模式。有两个线程,分别为主线程和后台线程,两个线程中各有自己的NSManagedObjectContext。并且这两个context共享一个persistentStoreCoordinator

首先,利用NSURLConnection异步从服务器获取数据信息,数据获取成功之后,建立一个NSOperation,在后台线程中解析获取的数据,生成NSManagedObject对象,然后将objects插入到后台线程中的context中,然后save 该context。以上这些操作都是在后台线程中执行的。

当后台context save之后,会发送通知,主线程中注册了该通知,就会获取该事件。在主线程中得到该通知,将变化合并到主线程的context中。然后刷新UI。

这里需要注意的一点是,当通知发生的时候,回调方法的执行是在后台线程中的,因此需要保证线程安全,将control dispatch 到主线程中,然后再执行和并操作。

通过这种方式可以做到耗时的Core Data 操作在后台线程中执行,而UI线程也不会被阻塞。

在Core Data中使用主线程有很多中原因,但很主要的原因就是为了主线程不会被阻塞。但是这么做带来的麻烦就是,由于Core Data是非线程安全的,会带来的线程安全问题,使程序的复杂性会提高。

时间: 2024-11-10 07:28:54

Concurrency with Core Data 案例学习的相关文章

Core Data Stack学习笔记

Entity Entities 实体->数据表一个实体可以表示一个数据模型 1> 通过图形化界面可以建立一个模型关系图,可以指定一对多,多对一,多对多的数据关系 -在数据库开发中,少用多对多关系 2> 通过工具能够自动生成对应的模型文件 3> 数据保存 NSManagedObject 被管理的对象-开发中设计的实体,本身都是被管理对象的子类 使用CoreData的一个注意事项:如果开发时,修改过数据模型,最好将沙盒中的数据库文件删除! 使用CoreData开发的步骤 1. 首先创建

Core Data中的多线程之二

在Core Data中使用多线程一般不是为了能够提高性能和效率,而是为了使主线程能够不被阻塞,使能够在做其他数据操作的时候,UI还能够继续响应用户的行为.当执行fetch操作时,Core Data系统会根据需要自动开启多个线程做相应的操作,因此我们自己添加多线程并不能提高效率,而仅仅是为了能够将主线程丛繁重的数据操作中解脱出来. 苹果官方文档中对Core Data并发操作的说明: Concurrency with Core Data: 1.Use Thread Confinement to Su

Core Data 教学

看了一篇国外的文章,关于iOS9的Core Data教学,在这里做了一下总结 Core Data 教学 示例开源地址:LastDayCoreData 在这篇文章中我们将学习Core Data的系列教程,你将使用Swift2.0写你的Core Data.你将发现在Xcode中它是很容易上手的,从启动代码导师数据模型编辑器.在教程结束后,你会了解到: 使用Xcode的model editor将你想存储在Core Data. 添加新的记录到 Core Data 从Core Data中读取一组数据 在表

CoreData学习:Core Data Stack(Swift)

Core Data是苹果官方提供的一套框架,用来解决对象生命周期管理.对象关系图管理和持久化等方面相关的问题.Core Data是模型层的技术,Core Data帮助你构建代表程序状态的模型层.Core Data也是一种持久化技术,它可以将模型的状态持久化到磁盘.但它更重要的特点是:Core Data不只是一个加载和保存数据的框架,它也能处理内存中的数据. 什么是Core Data? 对于Core Data框架将经常困惑,以为是数据库.其实Core Data并不是数据库.如果它不是数据库,那么C

iOS Swift学习笔记 Core Data (一)Hello Core Data

正在学习swift的Core Data,做个笔记,顺便分享源码 这个实例是一个很简单的Table,通过右上角的Add按钮可以添加新的用户名.数据存储在CoreData中,这样,才不会丢失. 通过这个例子可以学会: 使用Xcode的model编辑器创建数据对象的model data. 添加新的记录到CoreData中 从CoreData中获取记录集合 显示记录到table view中 这个例子十分简单,还有很多可以改进的地方,比如,每次要操作managed class都需要访问AppDelegat

Core Data 学习简单整理01

Core Data是苹果针对Mac和iOS平台开发的一个框架, 通过CoreData可以在本地生成数据库sqlite,提供了ORM的功能,将对象和数据模型相互转换 . 通过Core Data管理和操作. 能够快速达到项目的存储数据的需求. CoreData优点:能够合理管理内存,避免使用sql的麻烦,高效, 由于是苹果提供的解决方案, 所以不用太过担心会有其他问题. 我的观念就是先使用上了后再考虑其他, 问题有一个就解决一个. Core Data 默认使用Sqlite. 因此在沙盒Documen

Core Data 学习: 数据模型(Data Model)

 数据模型(Data Model) 前面文章中介绍了Core Data堆栈,它是Core Data的核心部分.并且了解了Core Data堆栈中管理对象上下文(managed object context),持久化存储协调者(persistent store coordinator),管理对象模型(managed object model)等组成部分.这篇文章我们将集中了解Core Data中的数据模型(data model). 在我们的应用中,管理对象模型(NSManagedObjectMod

iOS开发学习之Core Data

1.添加DataModel文件 2.添加实体和属性 3.创建NSManagedObject的子类,这里命名为Location(若没有实体属性类型是Transformable或没有额外的方法,只需要存储基本类型的话,可略过) 注意:这里可以做一个额外的工作,在Location+CoreDataProperties.h文件中,将实体属性类型是Transformable对应的@property属性的类型从id改为需要的类型 4.在AppDelegate.m文件添加以下代码: @interface Ap

Core Data 学习:轻量级版本迁移(Lightweight Migration)

什么时候需要版本迁移呢? 答案很简单,什么时候改变数据模型,什么时候就需要版本迁移. Core Data支持对数据模型(data model)改变的管理.改变数据模型将造成该数据模型与之前的持久化存储(stores)不兼容,而出现错误.所以,如果我们改变了自己的数据模型,就需要将原有的持久化存储中的数据转移到新的模型版本,这一过程就称为版本迁移(migration). 为什么需要进行版本迁移? 当我们发布应用之后,再添加一些新的特性,我们将需要更新持久化存储.在我们开发的过程中,很好操作,删除A