CoreData从后台线程读取数据仍然阻塞UI界面的原因及解决
Posted 大熊猫侯佩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CoreData从后台线程读取数据仍然阻塞UI界面的原因及解决相关的知识,希望对你有一定的参考价值。
问题现象
大家都知道,使用CoreData读取(Fetching)大量数据会阻塞主线程,从而导致界面的卡顿。
所以,我们必须用私有队列 (privateQueueConcurrencyType) 类型的托管上下文 (NSManagedObjectContext) 在后台线程读取数据:
如上图所示,我们已经用(私有队列的)托管上下文在后台读取数据,但界面在读取时仍然会发生卡顿。
这属于CoreData使用中一个非常常见的误区,如果不是造成了卡顿(读取海量数据),大家可能都发现不了这个问题。
那么这是什么原因?又该如何解决呢?
别急,下面就让我们拨开迷雾,彻底搞清楚这个问题吧。
Let’s Go!
问题分析
1. CoreData后台读取数据的误区
CoreData中的托管对象无法保证线程安全。上面谈过,要想在后台线程读取数据,需要创建特殊的托管上下文:
let bgContext
以上是关于CoreData从后台线程读取数据仍然阻塞UI界面的原因及解决的主要内容,如果未能解决你的问题,请参考以下文章