【发布时间】:2011-12-04 20:24:53
【问题描述】:
我开始认为我的问题的答案是否定的,但我仍然对此感到困惑和不确定。所以请确认。我已经学会了在多线程中使用 Core Data 时需要小心。 NSManagedObjectContext 对象不能跨越线程边界。作为一个同时使用线程和核心数据的新手,我很高兴地发现 GCD 应该让这一切变得更容易。
也许天真地,然后我想我会简单地创建一个专用的 GCD 调度队列来处理核心数据(或者甚至,如果需要,有多个调度队列,每个调度队列都有自己的核心数据上下文)。这本来很简单。
但现在我意识到 GCD 调度队列的一大优势是它可以根据需要管理和使用多个线程。所以 - 如果我理解这一点 - 我将任务移交给同一个调度队列,最终可能会在不同的线程中运行,可能会将核心数据上下文从一个线程移交给另一个线程,并且出现问题。对吗?
我已经阅读了许多相关的问题和答案,例如Core Data and threads / Grand Central Dispatch,但我仍然有些困惑。该问题的公认答案是使用 GCD 队列,确实确保在每个线程上创建一个新上下文,但没有指出这样做的必要性。另一个答案说“您可以在名为 com.yourcompany.appname.dataaccess 的队列上执行所有 CoreData 工作”似乎暗示只要 Core Data 工作仅限于一个 GCD 调度队列,那么一切都很好。也许不是。
【问题讨论】:
标签: ios core-data thread-safety grand-central-dispatch