Core Data中的多线程之二

在Core Data中使用多线程一般不是为了能够提高性能和效率,而是为了使主线程能够不被阻塞,使能够在做其他数据操作的时候,UI还能够继续响应用户的行为。当执行fetch操作时,Core Data系统会根据需要自动开启多个线程做相应的操作,因此我们自己添加多线程并不能提高效率,而仅仅是为了能够将主线程丛繁重的数据操作中解脱出来。

苹果官方文档中对Core Data并发操作的说明:

Concurrency with Core Data:

1、Use Thread Confinement to Support Concurrency.

2、Track changes in Other Threads Using Notifications

3、Fetch in the Background for UI Responsiveness

4、Saving in a Background Thread is Error-prone

5、If You Don‘t Use Thread Confinement

There are serveral situations in which performing operations with Core Data on a background thread or queue is beneficial, in particular if you want to ensure that your application‘s user interface remains responsive while Core Data is undertaking a long-running task. If you do perform concurrent operations with Core Data, however, you need to take considerable care that object graphs do not get into an inconsistent(不一致) state.

If you choose to use concurrency with Core Data, you also need to consider the application environment. For the most part, AppKit and UIKit are not thread safe; in particular, on OS X Cocoa bindings and controllers are not thread safe - if you are using these technologies, multi-threading may be complex.

时间: 2024-10-14 23:13:50

Core Data中的多线程之二的相关文章

多线程在Core Data中的使用

我们知道,Core Data是线程不安全的.我们不能在不同的线程中共享同一个NSManagedObject和NSManagedObjectContext对象.NSManagedObjectContext对象的创建和使用必须在同一个线程中. 当我们使用NSOperation来实现对Core Data的多线程操作的时候,这里要注意的是NSOperation 的init方法是在调用线程执行的,而start和main方法才是在NSOperation所在线程中执行的,因此要在子线程中创建NSManaged

IOS中的多线程【二】— NSOperation和NSOperationQueue

NSOperationQueue是一套基于Objective-c语言的API. GCD与NSOperationQueue的优缺点: NSOperationQueue:比较安全 GCD:没有NSOperationQueue安全,但使用起来简单,快速,还提供了一些操控底层的方法.实际开发中还是以GCD为主. NSOperationQueue实现多线程流程 1.定义一个任务队列. 2.定义一个任务. 3.把任务添加到队列中.一旦任务被添加到队列中,任务会马上被调度执行. 任务队列(NSOperatio

关于Core Data的一些整理(二)

关于Core Data的一些整理(二) 创建NSManagedObject的子类时,有一点是在这中间要强调的一点是,要不要勾选 Use scalar properties for primitive data types. 勾选上这个选项之后就是使用的是你在定义的时候使用的原始数据类型. 如果没有勾选的话,就会存在类型的转化,转换情况如下: String maps to String Integer 16/32/64, Float, Double and Boolean map to NSNum

在 Core Data 中存取 transformable 类型的数据

本文转载至 http://imenjoe.com/2015/04/10/CoreData-transformable-20150410/ 在开发过程中有一个需要在 Core Data 中存取 NSDictionary 的需求,但是在 Core Data 的 attributeType 中并没有直接支持 NSDictionary 的类型,基本上就是一些 scalar 类型和 date.binary data.undefined 和 transformable 类型. 最初的想法是把 NSDicti

Android中的多线程编程(二)Handler的原理(附源码)

Android中Handler的原理 一.Handler的原理: 1.Handler.Looper.MessageQueue之间的关系. (1).Handler类:向MessageQueue消息队列中发送消息,接收Looper返回来的消息并处理. (2).Looper类: 存储消息队列的容器.负责接收Handler发送的消息,并直接把消息回传给Handler自己. (3).MessageQueue类:存储消息. 2.关系: (1).创建Handler对象的时候,它就会绑定到默认的线程(UI线程)

ios开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】

               在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运用: 在本节,将通过对4个文本框内容的创建.修改,退出后台,再重新回到后台,来认识这两种持久化数据的方式.效果图如下[图1]: [图1 GUI界面效果图] [本次开发环境: Xcode:7.2     iOS Simulator:iphone6S plus   By:啊左]     一.数据库SQL

Swift中使用Core Data (一)

CoreData是Mac.iPhone应用里标准的数据存储方法.所以,我们很有必要学习这个技术.那么我们要创建什么呢?首先是一个table view来处理数据,添加.删除.编辑,还有查找和排序.这些数据会被一直保存,即使是设备重启了都会存在.因为,这些数据时放在sqlite里的. 苹果的官方是这么描述Core Data的,“Core Data库是一个高层的自动的管理对象生命周期和持久话的解决方案”. 下面,我们就一步一步的开始.首先创建一个Xcode6的项目,选择single-view-temp

Core Data-备用

Core Data是一个功能强大的层,位于SQLite数据库之上,它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互.Core Data将数据库行转换为OC对象(托管对象)来实现,这样无需任何SQL知识就能操作他们. Core Data位于MVC设计模式中的模型层,一般需要在设备上存储结构化数据时,考虑使用SQLite或是序列化等方法,而Core Data是这两种方法的混合体,并增加了一些功能,提供了SQL强大威力,但是用起来又和序列化一样简单.Core Data能将应用程序中的对象

CoreData学习:Core Data Stack(Swift)

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