gpt4 book ai didi

ios - 核心数据 : difference between backgroundContext and child context with privateQueueConcurrencyType?

转载 作者:行者123 更新时间:2023-12-04 15:39:43 29 4
gpt4 key购买 nike

使用 CoreData,您可以要求容器使用 container.newBackgroundContext() 创建一个背景上下文。 .

这对于在后台使用核心数据而不影响 UI 主上下文很有用。

您还可以使用 privateQueueConcurrencyType 创建子上下文

let context = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)

在这种情况下,如果我没有错,上下文仍将在不同队列的后台执行。

那么这两者之间有什么区别,何时使用一种和另一种呢?

最佳答案

您对上下文的初始化,即:

let context = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)

NSPersistentContainer 引入之前被普遍使用.另见 https://developer.apple.com/documentation/coredata/using_core_data_in_the_background ,他们说:

Initializing and Configuring Contexts For both contexts, the initialization of the NSManagedObjectContext instance is the same: let moc = NSManagedObjectContext(concurrencyType:<#type#>) The parameter being passed in as part of the initialization determines what type of NSManagedObjectContext is returned. When you use the NSPersistentContainer, you configure the viewContext property as a main queue (NSManagedObjectContextConcurrencyType.mainQueueConcurrencyType) context, and configure the contexts associated with performBackgroundTask(_:) and newBackgroundContext() as a private queue (NSManagedObjectContextConcurrencyType.privateQueueConcurrencyType).



newBackgroundContext() 的文档说如下:

Invoking this method causes the persistent container to create and return a new NSManagedObjectContext with the concurrencyType set to NSManagedObjectContextConcurrencyType.privateQueueConcurrencyType. This new context will be associated with the NSPersistentStoreCoordinator directly and is set to consume NSManagedObjectContextDidSave broadcasts automatically.


newBackgroundContext()与您提供的代码相同,以及我在上面的引文中突出显示的一些额外内容。

在为 iOS 10+ 开发时,我建议使用 NSPersistentContainer并使用 newBackgroundContext()当你想阻塞调用线程时,或者 performBackgroundTask如果您不想在想要将工作分派(dispatch)到后台时调用线程来阻止。

我在 iOS 10 之前没有使用过 CoreData,但我认为你需要做更多的事情来使上下文在使用 concurrenyType 初始化时工作。 .不再需要 newBackgroundContext() .

关于ios - 核心数据 : difference between backgroundContext and child context with privateQueueConcurrencyType?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58233452/

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