swa*_*ner 3 core-data ios swift
这两种方法有什么区别?
container.performBackgroundTask { (context) in
// ... do some task on the context
// save the context
do {
try context.save()
} catch {
// handle error
}
}
Run Code Online (Sandbox Code Playgroud)
和
let context = persistentContainer.newBackgroundContext()
context.perform {
// ... do some task on the context
// save the context
do {
try context.save()
} catch {
// handle error
}
}
Run Code Online (Sandbox Code Playgroud)
何时使用第一种方法和何时使用第二种方法?
Tom*_*ton 13
区别在于如何处理并发.
随performBackgroundTask...
container.performBackgroundTask { (context) in
// ... do some task on the context
}
Run Code Online (Sandbox Code Playgroud)
容器创建新的背景上下文以执行任务.此函数立即返回,因此如果在任务完成之前再次调用它,则两个任务可以同时运行.
随newBackgroundContext...
let context = persistentContainer.newBackgroundContext()
context.perform {
// ... do some task on the context
}
Run Code Online (Sandbox Code Playgroud)
您创建一个新的上下文并在后台执行一些操作.如果context.perform再次调用相同的上下文,则新的闭包也会在后台运行.但由于它是相同的上下文,第二个在第一个完成之前不会开始.
它归结为第一个可以有许多背景上下文同时工作,而第二个可以更容易确保只有一个.
第一个选项可以有更多同时的后台任务,这可能是好的,但也可能意味着多个调用具有冲突的更改.第二个选项序列化后台任务,因为它们不会同时运行,所以它们不会相互冲突.哪个更好取决于你在闭包中做了什么.
| 归档时间: |
|
| 查看次数: |
883 次 |
| 最近记录: |