【问题标题】:Multithreaded Core data多线程核心数据
【发布时间】:2013-03-02 17:23:14
【问题描述】:
我很难弄清楚如何以最佳方式设置 Core 数据。现在我有一个单例,包含核心数据堆栈和一个在主线程上运行的 ManagedObjectContext。在我阅读了很多文章和教程之后,我一直很困惑。一些统计数据表明单例还可以,而其他统计表明,主线程上的单例和一个 managedObjectContext 是一个坏主意(这是正确的吗?)。那么如何使用多线程最有效地创建核心数据堆栈?
由于我的应用程序正在将大量解析的 JSON 数据下载并处理到我的核心数据模型中,因此我想在带有 MOC 的后台线程中导入这些数据,并在主线程中使用 MOC 显示数据,是这是正确的做法?
我曾尝试使用 Magical Record,但我认为有关此“工具”的信息很少,我似乎无法理解如何导入 JSON 数据、避免重复、创建关系等。
提前感谢您的帮助:)
【问题讨论】:
标签:
iphone
objective-c
core-data
sdk
【解决方案1】:
Core Data 的单线程或多线程策略取决于您的应用的设计目的以及它在 Core Data 中保留了多少数据(以及读取/写入的频率) .
使用后台线程导入数据并在主线程上进行一些核心数据读取工作。只要确保每个线程都有一个 MOC,并且您只能访问创建它的线程上的每个 MOC! Core Data 的合并功能(如mergeChangesFromContextDidSaveNotification:)非常有用。
这个问题中的一些有用信息和接受的答案:
Core Data multi thread application
【解决方案2】:
最好创建两个NSManagedObjectContext。一种用于读取核心数据并更新用户界面,另一种是将记录写入核心数据。在使用主线程和后台线程时避免冲突
【解决方案3】:
如果你锁定它,单例是可以的。
两个都可以,但您会希望使用相同的后备存储,并从读取上下文观察写入上下文的更改,然后将更改合并。