Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CoreData:backgroundContext和privateQueueConcurrencyType的子上下文之间的差异?_Ios_Swift_Core Data_Nsmanagedobjectcontext - Fatal编程技术网

Ios CoreData:backgroundContext和privateQueueConcurrencyType的子上下文之间的差异?

Ios CoreData:backgroundContext和privateQueueConcurrencyType的子上下文之间的差异?,ios,swift,core-data,nsmanagedobjectcontext,Ios,Swift,Core Data,Nsmanagedobjectcontext,使用CoreData,您可以要求容器使用container.newBackgroundContext()创建背景上下文 这对于在后台使用核心数据而不影响UI主上下文非常有用 您还可以使用privateQueueConcurrencyType let context = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType) 在这种情况下,如果我没有弄错,上下文仍将在另一个队列的后台执行 那么这两者之间的区别是什

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

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

您还可以使用
privateQueueConcurrencyType

let context = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
在这种情况下,如果我没有弄错,上下文仍将在另一个队列的后台执行


那么这两者之间的区别是什么,以及何时使用一个和另一个呢?

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

let context = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
在引入之前被广泛使用。另请参见,其中说明:

初始化和配置上下文对于这两种上下文 NSManagedObjectContext实例的初始化是相同的:let moc=NSManagedObjectContext(并发类型:)参数 作为初始化的一部分传入决定了 返回NSManagedObjectContext。当你使用 NSPersistentContainer,将viewContext属性配置为 主队列 (NSManagedObjectContextConcurrencyType.mainQueueConcurrencyType) 上下文,并配置与关联的上下文 将performBackgroundTask(:)和newBackgroundContext()作为私有 队列 (NSManagedObjectContextConcurrencyType.privateQueueConcurrencyType)

文件说明如下:

调用此方法将导致持久化容器创建 返回concurrencyType设置为的新NSManagedObjectContext NSManagedObjectContextConcurrencyType.privateQueueConcurrencyType。 此新上下文将与 NSPersistentStoreCoordinator直接启动,并设置为使用 NSManagedObjectContextDidSave自动保存广播。

newBackgroundContext()
的作用与您提供的代码相同,我在上面的引文中强调了一些额外的功能

在为iOS 10+开发时,我建议在您想要阻止调用线程时使用
nspersistentcainer
并使用
newBackgroundContext()
,或者在您想要将工作分派到后台时不想调用线程阻止时使用
performBackgroundTask


在iOS 10之前,我没有使用过CoreData,但我认为在使用
concurrenyType
初始化上下文时,您需要做更多的工作才能使上下文正常工作。对于
newBackgroundContext()

我想在@J.Doe的答案中添加这一点。。。以6分5秒的速度观看WWDC 2019视频,对便利方法的口头描述
。performBackgroundTask
“为您创建背景上下文,并在您的块返回时自动处理”。