我正在使用NSPrivateQueueConcurrencyType
并发类型创建我的托管对象上下文。
我也使用performBlock:
选择器在后台执行操作。因此,如果我在后台(在 performBlock 中)获取一些对象,那么在主线程中使用生成的托管对象是否安全?
我正在使用NSPrivateQueueConcurrencyType
并发类型创建我的托管对象上下文。
我也使用performBlock:
选择器在后台执行操作。因此,如果我在后台(在 performBlock 中)获取一些对象,那么在主线程中使用生成的托管对象是否安全?
我不是 100% 确定,但根据我自己的经验,我是这样做的:如果您要更改变量属性,请在performBlock
. 我有一个案例,阅读导致一些奇怪的行为,但总的来说它似乎没问题。如果您想更加安全,performBlock
请在每次以任何方式触摸托管对象时使用。
您需要为每个线程使用不同的上下文,如此处所述iOS Developer - Core data multithreading
Core Data描述了一种实现方式- 每个线程实现一个上下文
抱歉,我应该搜索得更好,这正是我的问题和答案: Core Data's NSPrivateQueueConcurrencyType andsharing objects between threads
NSManagedObject
作为一般规则,无论您使用什么并发类型,跨线程 共享实例都是不安全的。
但是,您可以使用一个库来使您的上下文和对象实例成为线程安全的。有了它,您几乎可以忽略所有关于确保上下文之间线程隔离的废话,并将精力集中在重要的事情上,例如构建应用程序的实际功能。