从开始就注重性能,将有助于您为未来的应用做准备。您的数据库一开始可能很小,随着数量的不断增长,错误的使用方式将导致查询缓慢,从而降低用户体验。本文将从七个方面来带领大家来掌握一下CoreData性能提升的技巧。
一、利用后台管理object context对象上下文
很多朋友对后台托管对象上下文不太了解,我们经常使用视图上下文来执行任何Core Data相关的任务,例如插入新内容,删除内容,获取内容等。
最初,我们的应用程序数量容量很少时,仅使用视图上下文并不是问题,也不会导致与Core Data相关的任何可见的性能损失。但是,一旦我们的应用开始增长,我们就会发现到视图上下文与主队列相关联,缓慢的查询阻止了我们的用户界面,并且我们的应用程序响应速度变慢。
通常,最佳实践是在后台队列上执行数据处理,因为它可能占用大量CPU。诸如将JSON导入Core Data中的示例可能会阻塞视图上下文并导致用户界面无响应。
解决方案是利用后台管理对象上下文。最新的API使从持久性容器创建新上下文变得容易:
let backgroundContext = persistentContainer.newBackgroundContext()
我建议在NSManagedObjectContext(concurrenyType :)初始化方法上使用此方法,因为该方法将自动与NSPersistentStoreCoordinator关联,并且还将设置为使用NSManagedObjectContextDidSave广播。这样可以使您的背景上下文与视图上下文保持同步。
您可以将此背景上下文保存在自定义的持久性容器子类上。这样,您可以重用后台上下文,而只需要管理两个上下文。这使您的核心数据结构易于理解,并且避免了多个不同步的上下文。
如果只需要在几个地方使用背景上下文,则还可以决定使用performBackgroundTask(_ :)方法在原地创建背景上下文
persistentContainer.performBackgroundTask { (backgroundContext) in
// .. Core Data Code
}
但是,此方法每次调用时都会创建一个新的NSManagedObjectContext。如果您要更频繁地分派到后台上下文,则可能要考虑使用共享后台上下文。