前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CoreData的线程安全

CoreData的线程安全

作者头像
rectinajh
发布2018-05-17 16:13:15
7630
发布2018-05-17 16:13:15
举报

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,尤其是其中一个进行写操作,另一个进行读操作,就很容易发生死锁,所以这些动作需要保证有序地得到执行。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.05.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档