Core data 在线程之间传递NSManagedObjectContext

Core data 在线程之间传递NSManagedObjectContext,core-data,thread-safety,nsmanagedobjectcontext,Core Data,Thread Safety,Nsmanagedobjectcontext,在一个线程中初始化NSManagedContext,然后将其传递给另一个线程,在该线程中插入/获取performBlock:,是否安全 所以提到了performBlock:,并涉及到我的问题,但这还不够。它并没有明确说明创建上下文的线程和执行块的线程,以及它们将是不同线程的事实 答案似乎过时了。因为块可以在不同的线程上执行,所以不能为每个线程管理上下文并使用performBlock: 在一个线程中初始化NSManagedContext,然后将其传递给另一个线程,在该线程中插入/获取perform

在一个线程中初始化
NSManagedContext
,然后将其传递给另一个线程,在该线程中插入/获取
performBlock:
,是否安全

所以提到了
performBlock:
,并涉及到我的问题,但这还不够。它并没有明确说明创建上下文的线程和执行块的线程,以及它们将是不同线程的事实

答案似乎过时了。因为块可以在不同的线程上执行,所以不能为每个线程管理上下文并使用
performBlock:

在一个线程中初始化NSManagedContext,然后将其传递给另一个线程,在该线程中插入/获取
performBlock:
,是否安全

如果您在
performBlock:
call中执行所有涉及核心数据的操作,那么它是安全的。插入和获取,当然。但也可以在任何时候以任何方式接触托管对象,包括使用已经获取的对象的属性值


你提到“…你不能每个线程都有托管上下文并使用performBlock:…”这不是真的——你可以有你需要的任意多个托管对象上下文,并使用
performBlock:

可能重复@DanielCompton Nah,他有更具体的问题,而被接受的答案似乎已经过时。初始化
NSManagedObjectContext
是相对“轻量级”的操作,为什么需要在不同的线程中执行它?@MichałCiuba我不需要在不同的线程中执行。我很想在同一个线程中执行它:),但如何在运行
performBlock:
的同一个线程上初始化上下文?谢谢您的回答。关于每个线程的上下文:performBlock将在不同于初始化上下文的线程的线程上运行block(带有插入、获取…)。因此,将有不止一个线程使用上下文。