gpt4 book ai didi

xcode - NSPersistentContainer newBackgroundContext 的最佳实践是什么?

转载 作者:行者123 更新时间:2023-12-01 23:27:55 26 4
gpt4 key购买 nike

我正在熟悉 NSPersistentContainer .我想知道使用 newBackgroundContext 生成私有(private)上下文的实例是否更好。每次我需要在后台插入/获取一些实体或创建一个私有(private)上下文时,保留它并在应用程序的整个生命周期内用于所有后台任务。

该文档还提供了方便的方法performBackgroundTask .只是想找出这里的最佳实践。

最佳答案

我通常推荐两种方法之一。 (还有其他可用的设置,但这是我使用过的两个,经过测试并会推荐。)
简单的方法
您从 viewContext 读取并写入 viewContext 并且仅使用主线程。这是最简单的方法,并且避免了许多核心数据常见的多线程问题。问题是磁盘访问是在主线程上发生的,如果你做了很多事情,它可能会减慢你的应用程序。
这种方式适用于小型轻量级应用。任何拥有少于几千个实体并且一次没有批量更改的应用程序都将是一个很好的候选者。一个简单的待办事项列表就是一个很好的例子。
复杂的方式
复杂的方法是仅从主线程上的 viewContext 读取,并使用串行队列中的 performBackgroundTask 完成所有写入。 performBackgroundTask 中的每个 block 都重新获取它需要的任何 managedObjects(使用 objectIds),并且它创建的所有 managedObjects 在 block 的末尾被丢弃。每个 performBackgroundTask 都是事务性的,并且 saveContext 在 block 的末尾被调用。更完整的描述可以在这里找到:NSPersistentContainer concurrency for saving to core data
这是一个强大且功能强大的核心数据设置,可以以任何合理的规模管理数据。
问题是您总是要确保 managedObjects 来自您期望的上下文并且在正确的线程上被访问。您还需要一个串行队列来确保您不会遇到写冲突。而且您经常需要使用 fetchedResultsController 来确保在您持有指向实体的指针时不会删除它们。

关于xcode - NSPersistentContainer newBackgroundContext 的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51014065/

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