iOS文档在“执行块操作”中指出:
func performBlockAndWait(_ block: () -> Void)
讨论:如果上下文是使用NSPrivateQueueConcurrencyType或NSMainQueueConcurrencyType初始化的,则可以使用此方法向托管对象发送消息。
但是让我困惑的是,苹果的Core Data文档示例并不总是使用“执行块操作”。
do {
try managedObjectContext.save()
} catch {
fatalError("Failure to save context: \(error)")
}
let moc = managedObjectContext
let employeesFetch = NSFetchRequest(entityName: "Employee")
do {
let fetchedEmployees = try moc.executeFetchRequest(employeesFetch)
as! [AAAEmployeeMO]
} catch {
fatalError("Failed to fetch employees: \(error)")
}
我想知道何时使用执行块操作。在使用托管对象上下文时,是否最好始终使用它们。苹果为什么不总是在他们的示例代码中使用它们。在这里他们使用它(core data api reference),而在这里不使用(core data programming guide)。
performAndWait
。从线程推理也很清楚。他们试图说的是,当从配置它的同一线程调用MoC方法调用时,它已经是同步的了。因此,performAndWait
是多余的。 - BaseZen