Objective c NSPrivateQueueConcurrencyType上下文只能在performBlock中操作?

Objective c NSPrivateQueueConcurrencyType上下文只能在performBlock中操作?,objective-c,ios,multithreading,core-data,concurrency,Objective C,Ios,Multithreading,Core Data,Concurrency,我想知道NSPrivateQueueConcurrencyType上下文是否只在-performBlock和-performBlockAndWait中运行。 从NSPrivateQueueConcurrencyType上下文返回的NSManagedObject无法在performBlock之外访问 我从苹果文档中找到了以下句子“iOS 5.0的新功能” 将消息发送到使用队列关联创建的上下文时,如果代码尚未在该队列(对于主队列类型)上执行或在performBlock的范围内执行,则必须使用perf

我想知道NSPrivateQueueConcurrencyType上下文是否只在-performBlock和-performBlockAndWait中运行。 从NSPrivateQueueConcurrencyType上下文返回的NSManagedObject无法在performBlock之外访问

我从苹果文档中找到了以下句子“iOS 5.0的新功能”

将消息发送到使用队列关联创建的上下文时,如果代码尚未在该队列(对于主队列类型)上执行或在performBlock的范围内执行,则必须使用performBlock:或performBlockAndWait:方法。。。调用(对于专用队列类型)。在传递给这些方法的块中,可以自由使用NSManagedObjectContext的方法


如果是这样,为什么MagicalRecord和XMPPFramework不在块内操作context和NSManagedObject?

我不知道MagicalRecord和XMPPFramework中的代码做什么或不做什么。您需要通过他们的正常支持方式与他们联系

但是,我可以告诉您,如果使用NSPrivateQueueConcurrencyType创建MOC,那么访问该MOC或该MOC拥有的托管对象的唯一方法就是通过performBlock*API

如果您使用NSMainQueueConcurrencyType创建MOC,那么您可以在主线程中运行或通过performBlock*API访问它

如果使用NSConfinementConcurrencyType创建MOC,则只能从创建MOC的线程访问MOC。如果未指定并发,则使用限制作为默认值

这些是当前创建主运行中心的唯一方法,以及它们的使用规则摘要


我相信MagicalRecord使用了限制,并且每个线程都有一个MOC,但我从未使用过它,而且只查看了较旧版本的代码库,因此它可能会随着嵌套上下文的出现而发生很大的变化。

我不知道MagicalRecord和XMPPFramework中的代码做了什么或没有做什么。您需要通过他们的正常支持方式与他们联系

但是,我可以告诉您,如果使用NSPrivateQueueConcurrencyType创建MOC,那么访问该MOC或该MOC拥有的托管对象的唯一方法就是通过performBlock*API

如果您使用NSMainQueueConcurrencyType创建MOC,那么您可以在主线程中运行或通过performBlock*API访问它

如果使用NSConfinementConcurrencyType创建MOC,则只能从创建MOC的线程访问MOC。如果未指定并发,则使用限制作为默认值

这些是当前创建主运行中心的唯一方法,以及它们的使用规则摘要

我相信MagicalRecord使用了限制,并为每个线程保留了一个MOC,但我从未使用过它,只查看了较旧版本的代码库,因此它可能会随着嵌套上下文的出现而发生很大的变化。

解决了这个问题。解决了这个问题。