【问题标题】:Pass NSManagedObjectContext between threads在线程之间传递 NSManagedObjectContext
【发布时间】:2015-05-16 08:01:25
【问题描述】:

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

所以https://stackoverflow.com/a/12876800/2645683 提到performBlock: 并与我的问题有关,但这还不够。它没有明确说明创建上下文的线程和执行块的线程,以及这些将是不同的线程的事实。

答案https://stackoverflow.com/a/12874637/2645683 似乎已经过时了。由于您不能为每个线程管理上下文并使用performBlock:,因为块可以在不同的线程上执行。

【问题讨论】:

  • @DanielCompton Nah,他有更具体的问题,接受的答案似乎已经过时了。
  • 初始化NSManagedObjectContext是比较“轻量级”的操作,为什么要在不同的线程中做呢?
  • @MichałCiuba 我不需要在不同的线程中执行此操作。我很想在同一个线程中执行此操作 :) 但是如何在运行 performBlock: 的同一个线程上初始化上下文?

标签: core-data thread-safety nsmanagedobjectcontext


【解决方案1】:

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

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

您提到 "...您不能为每个线程使用托管上下文并使用 performBlock:..." 这不是真的 - 您可以根据需要拥有尽可能多的托管对象上下文,并且与他们一起使用performBlock:

【讨论】:

  • 感谢您的回答。关于每个线程的上下文: performBlock 将在与初始化上下文的线程不同的线程上运行块(带有插入、提取...)。所以会有不止一个线程使用上下文。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多