- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在熟悉 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/
似乎有两种方法可以在不阻塞主线程 UI 的情况下在 CoreData 中执行异步读取。 newBackgroundContext + NSFetchRequest 来源:https://www.adv
我正在熟悉 NSPersistentContainer .我想知道使用 newBackgroundContext 生成私有(private)上下文的实例是否更好。每次我需要在后台插入/获取一些实体或创
stack overflow 中已经有类似的问题,但它对我不起作用。 在我的应用程序中有一个用例,我必须观察数据库更改才能执行某些操作。为了接收更新,我订阅了 NSManagedObjectConte
这两种方法有什么区别? container.performBackgroundTask { (context) in // ... do some task on the context
我有一个NSManagedObject NewOrder,它只存储NSManagedObjectID以便于上下文。当我需要访问它时,我位于主上下文中,或者位于BG线程上persistentContai
在我的应用程序中,我有一个 NSFetchedResultsController 用于在 UITableView 中加载核心数据对象。与此 FRC 关联的提取请求使用可用于 NSPersistentC
我是一名优秀的程序员,十分优秀!