Swift何时使用执行块操作

时间:2016-08-04 02:49:13

标签: swift core-data

iOS documentation通过"执行阻止操作"来声明以下内容:

  

func performBlockAndWait(_ block :() - > Void)

     

讨论   如果使用NSPrivateQueueConcurrencyType或NSMainQueueConcurrencyType初始化上下文,则使用此方法将消息发送到托管对象。

但令我困惑的是,Apple的核心数据文档示例并不总是使用"执行块操作"。

Saving Managed Objectets:

do {
  try managedObjectContext.save()
} catch {
  fatalError("Failure to save context: \(error)")
}

Fetching Managed Objects

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)。

1 个答案:

答案 0 :(得分:1)

您错过了这部分API文档:

https://developer.apple.com/reference/coredata/nsmanagedobjectcontext

  

有两个例外:

     

...

     

如果您的代码在主线程上执行,则可以调用方法   在主队列样式上下文直接而不是使用块   基于API。