gpt4 book ai didi

cocoa - 核心数据和线程

转载 作者:行者123 更新时间:2023-12-03 17:08:15 25 4
gpt4 key购买 nike

使用 Core Data 和线程有哪些不为人知的陷阱?我已经阅读了很多文档,到目前为止,我在文档中或通过痛苦的经历遇到了以下内容:

  • 为每个线程使用一个新的 NSManagedObjectContext,但单个 NSPersistentStoreCoordinator 足以满足整个应用程序的需要。
  • 在将 NSManagedObject 的 objectID 发送回主线程(或任何其他线程)之前,请确保上下文已保存(或者至少,它不是新插入但尚未保存的对象) ) - 否则 objectID 实际上将是一个临时 ID,而不是持久 ID。
  • 使用 mergeChangesFromContextDidSaveNotification:检测另一个线程中何时发生保存,并使用它将这些更改与当前线程的上下文合并。

奖金问题/观察:我被一些文档的措辞所吸引,认为 mergeChangesFromContextDidSaveNotification: 是主线程只需要将更改从工作线程合并到“主”上下文中的东西 - 但我不这样做我认为是这样的。

我设置导入器来创建批量数据,这些数据是使用拥有自己上下文的 NSOperation 子类导入的。这些操作被加载到 NSOperationQueue 中,该队列设置为允许默认数量的并发操作,因此多个导入批处理可以同时运行。我偶尔会遇到非常奇怪的验证错误和异常(例如尝试将 nil 添加到关系中)以及其他当我在主线程上执行所有相同操作时从未见过的失败。我突然想到(也许这应该是显而易见的),也许需要对每个线程中的所有上下文进行上下文合并 - 而不仅仅是“主”线程!我不知道为什么我之前没有想到这一点,但我认为这有帮助。 (不过,它还没有经过足够好的测试,我还无法确定。)无论如何,您是否确实需要观察可能使用相同数据集并添加/更新的所有导入线程的通知相同的实体?如果是这样,这就是另一个陷阱要点,IMO,尽管我还不确定它是否有效。

考虑到我在 Core Data 中遇到过很多这样的问题(而且并非所有问题都与多线程有关),我不得不想知道还有多少这样的问题还潜伏着。由于多线程经常会出现错误,由于时间问题,这些错误即使不是不可能重现,也很困难,我想我会问是否有人有其他我可能遗漏的重要事情,我需要关心。

最佳答案

有相当多的文档专门讨论 Core Data and Threading 的主题。 .

从您的一系列问题中不清楚该文档未涵盖哪些内容。

关于cocoa - 核心数据和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2181969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com