Ios 核心数据并发队列样式MOC getters线程安全

Ios 核心数据并发队列样式MOC getters线程安全,ios,iphone,core-data,thread-safety,nsmanagedobjectcontext,Ios,Iphone,Core Data,Thread Safety,Nsmanagedobjectcontext,以下直接来自NSManagedObjectContext的段落确实让我感到困惑: 基于队列的托管对象上下文上的Setter方法是线程安全的。 您可以在任何线程上直接调用这些方法 最大的问题是在ManagedObjectContext上设置方法,而不是在该上下文所拥有的ManagedObjects上?还是两者都有?。特别是对于专用队列MOC对象,如下所示: [privateContext setPersistentStoreCoordinator:self.persistentStoreCoord

以下直接来自NSManagedObjectContext的段落确实让我感到困惑:

基于队列的托管对象上下文上的Setter方法是线程安全的。 您可以在任何线程上直接调用这些方法

最大的问题是在ManagedObjectContext上设置方法,而不是在该上下文所拥有的ManagedObjects上?还是两者都有?。特别是对于专用队列MOC对象,如下所示:

[privateContext setPersistentStoreCoordinator:self.persistentStoreCoordinator];
无论执行这一行的线程是什么,都是线程安全的,但类似于:

 [myPrivateQueueOwnedManagedObject setTitle:@"My Title];
同样是线程安全的吗?文档对此非常模糊,但我的理解是这不是线程安全的,对吗

ManagedObjectContext中属性的getter(例如请求persistentStoreCoordinator属性)是线程安全的吗?。我的理解是,不会


此外,我一直认为某些托管对象属性(如objectID)是线程安全的,不需要使用performBlock:或performBlockAndWait:访问。托管对象上还有其他线程安全的属性吗?

-setPersistentStoreCoordinator:
是线程安全的吗托管对象上下文上的setter方法

-setTitle:
不是因为您在托管对象上调用setter

您可以使用调试标志确认此行为:

-com.apple.CoreData.ConcurrencyDebug 1
当您违反线程限制时,它将抛出断言

更新 虽然我们只是为了确认文档中的第二段,但在主线程上访问主样式队列MOC对象的MOC和MO是否安全?。我的理解是,例如,如果上下文是主样式,线程是主线程,那么setTitle就可以了。这是因为线程限制afaik的遗留原因,并且在使用MO进行UI更新时也有很大帮助


如果上下文定义为主队列,并且您位于主队列(又名UI线程,又名主线程)上,则可以直接访问所有内容,而无需
-performBlock:
。您位于上下文所属的线程上,因此遵循线程限制规则。

谢谢,我读过关于并发调试标志的内容,但我没有使用它,应该非常有用,谢谢。虽然我们只是为了确认文档中的第二段,但在主线程上访问主样式队列MOC对象的MOC和MO是否安全?。我的理解是,例如,如果上下文是主样式,线程是主线程,那么setTitle就可以了。这是基于线程限制afaik的遗留原因,也是使用MO进行UI更新时的一个很大帮助。谢谢,还有关于调试标志的好提示-非常有用。