如何在后台使用CoreData获取数据



我需要启用我的应用程序来长时间保存数据。当我开始阅读关于这个主题的文章时,我遇到了三种不同的方法,并意识到我没有看到任何差异。请解释以下提取方法的优缺点:

A(

container.performBackgroundTask { context in
self.data = try! context.fetch(request)
DispatchQueue.main.async {
self.updateUI()
}
}

B(

let context = container.newBackgroundContext()
context.perform {
self.data = try! context.fetch(request)
DispatchQueue.main.async {
self.updateUI()
}
}

C(

let context = container.newBackgroundContext()
let asyncFetchRequest = NSAsynchronousFetchRequest(fetchRequest: request) { result in
self.data = result.finalResult!.first!.data!
DispatchQueue.main.async {
self.updateUI()
}
}
try! context.execute(asyncFetchRequest)

我认为您给出的示例没有区别(仅与fetch相关(。

A( 总是创建一个新的上下文,这意味着当多次运行以创建实体或获取或创建实体时是不安全的。

在创建的场景中,您最好使用B(,但需要保存共享的背景上下文。执行"perform"时,所有作业都同步运行在一个队列中。

对于C(,NSASynchronousFaceRequest在使用viewContext时大放异彩,您不必创建子/背景上下文。但为它创建一个并没有错。

相关内容

  • 没有找到相关文章

最新更新