美文网首页
CoreData的线程安全

CoreData的线程安全

作者: rectinajh | 来源:发表于2017-05-03 15:27 被阅读94次

1.没有线程安全的coredata数据读取:
NSManagedObjectContext对象的创建:
_managedObjectContext = [[NSManagedObjectContext alloc] init];

2.线程安全的coreData操作:
1,创建并行的NSManagedObjectContext对象:
[[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];

ps:
NSConfinementConcurrencyType (或者不加参数,默认就是这个)
NSMainQueueConcurrencyType (表示只会在主线程中执行)
NSPrivateQueueConcurrencyType (表示可以在子线程中执行)

在主线程,主要执行插入,修改和删除操作,一些小的查询也可以在这里同步执行,如果有大的查询,就起一个新的 NSPrivateQueueConcurrencyType 类型的 NSManagedObjectContext,然后放在后台去执行查询,查询完成后将结果返回主线程。

如果是查询的话,因为 NSManagedObject 也不能跨线程访问,所以在block里获取到的NSManagedObject对象只能将objectid传到主线程,主线程再通过 objectWithID 恢复对象的方法

2,NSManagedObjectContext在后台线程执行是通过 performBlock 方法来实现的,在执行读取操作时使用一下两个方法:

-(void)performBlock:(void (^)(void))block
-(void)performBlockAndWait:(void (^)(void))block

注意:
如果两个线程同时访问一份context,尤其是其中一个进行写操作,另一个进行读操作,就很容易发生死锁,所以这些动作需要保证有序地得到执行。

相关文章

  • iOS CoreData多线程(一)☂️

    CoreData与线程安全 CoreData不是线程安全的,对于ManagedObject以及ManagedObj...

  • CoreData的线程安全

    1.没有线程安全的coredata数据读取:NSManagedObjectContext对象的创建:_manage...

  • coreData线程安全初探

    留坑晚上更. 获取手机相册或者拍照得到图片时要缩小图片的尺寸,高分辨率的图片非常占内存,而且存储也非常缓慢,缩小之...

  • 关于CoreData和SQLite多线程访问时的线程安全问题

    关于CoreData和SQLite多线程访问时的线程安全问题 数据库读取操作一般都是多线程访问的。在对数据进行读取...

  • iOS CoreData多线程安全

    为何使用多线程 在开发中使用到了CoreData,虽然实例化NSManagedObjectContext的时候...

  • CoreData Stack

    在文章开始之前,我们先明确两个基本点:1.CoreData不是线程安全的,NSManagedObject和NSMa...

  • atomic & nonatomic

    什么是线程安全??? 线程安全:多线程操作共享数据不会出现想不到的结果就是线程安全的,否则,是线程不安全的。 at...

  • HashMap 和 Hashtable 的区别

    线程安全: HashMap 是非线程安全的,而 Hashtable 是线程安全的,因为 Hashtable 内部的...

  • Java 的 StringBuffer 和 StringBuil

    区别就是:线程安全,StringBuffer 是线程安全的,StringBuilder 不是线程安全的。 他俩的实...

  • 2018-06-12 第三十七天

    一、线程安全 线程安全的问题,是针对多线程的程序。单线程的情况下,是不存在线程安全问题。 产生线程安全问题的原因:...

网友评论

      本文标题:CoreData的线程安全

      本文链接:https://www.haomeiwen.com/subject/xvoktxtx.html