何时使用Swift执行块操作

3

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)。
1个回答

3

抱歉,我的问题可能没有表述清楚。该讨论中提到了使用此方法来向托管对象发送消息,如果上下文是使用NSPrivateQueueConcurrencyType或NSMainQueueConcurrencyType初始化的。这表明应始终使用这些类型,而不考虑任何例外情况。我更想知道最佳实践是什么,因为Apple文档在这方面并不一致。 - BARJ
我不理解你对此的阅读。异常非常明确,而一般规则的语言是中性的,没有任何强烈的语言。这意味着通常情况下(因为你经常在后台线程上执行Core Data操作),你必须使用performAndWait。从线程推理也很清楚。他们试图说的是,当从配置它的同一线程调用MoC方法调用时,它已经是同步的了。因此,performAndWait是多余的。 - BaseZen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接