iOS documentation通过"执行阻止操作"来声明以下内容:
func performBlockAndWait(_ block :() - > Void)
讨论 如果使用NSPrivateQueueConcurrencyType或NSMainQueueConcurrencyType初始化上下文,则使用此方法将消息发送到托管对象。
但令我困惑的是,Apple的核心数据文档示例并不总是使用"执行块操作"。
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)")
}
我想知道的是,何时使用执行块操作。在使用托管对象上下文时始终使用它们是最佳做法。是什么原因导致Apple并不总是在他们的示例代码中使用它们。他们在这里使用它(core data api reference),而不是(core data programming guide)。
答案 0 :(得分:1)
您错过了这部分API文档:
https://developer.apple.com/reference/coredata/nsmanagedobjectcontext
有两个例外:
...
如果您的代码在主线程上执行,则可以调用方法 在主队列样式上下文直接而不是使用块 基于API。