我不确定我是否了解Core Data中的perform()和performAndWait()函数的概念。

我们可以有两种类型的上下文:

1) .mainQueueConcurrencyType (main Queue)
2) .privateQueueConcurrencyType (background Queue)

对于这两种情况,我都可以理解performAndWait()的目的
它等待执行块代码,然后继续。

对于privateQueueConcurrencyType,文档说:
The NSPrivateQueueConcurrencyType configuration creates its own queue upon initialization and can be used only on that queue. Because the queue is private and internal to the NSManagedObjectContext instance, it can only be accessed through the performBlock: and the performBlockAndWait: methods.

但是在mainQueue中perform()的目的是什么?

当我们在mainQueue上有一个上下文并且我们更新/删除/无论NSQueuedObject是否在mainQueue上没有发生时?那么perform()的目的是什么?

最佳答案

当我们在mainQueue上有一个上下文并且我们更新/删除/无论NSQueuedObject是否在mainQueue上没有发生时?

如果您从其他队列中调用这些方法怎么办?如果代码正在其他队列上执行,则可以在使用主队列并发的托管对象上下文中调用performperformBlockAndWait。即使调用代码不在主队列中,该闭包中的代码也会在主队列上执行。

例如:

let customQueue = DispatchQueue(label: "queuename")
customQueue.async {
    // ... do some stuff ..
    mainQueueContext.performAndWait {
        // ... do some stuff on the main queue ...
    }
    // ... do some more stuff ...
}

10-04 21:41