ios – 当CoreData更新时,UITableView endUpdates需要很长时间

前端之家收集整理的这篇文章主要介绍了ios – 当CoreData更新时,UITableView endUpdates需要很长时间前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Core Data应用程序,它在UITableView中显示大量实例.

我们有一个在主线程中运行的mainQueueContext和一个在后台线程中运行的privateQueueContext.

我们在UITableView中加载数据没有问题,但是当我们从API加载刷新版本时,我们将它保存到privateQueueContext并将其合并到mainQueueContext中

[self.mainQueueContext mergeChangesFromContextDidSaveNotification:notification];

触发呼叫需要几秒钟

-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller

触发呼叫:

[self.tableView endUpdates];

然后应用程序挂起,cpu进入100%,内存开始无限期上升,直到内存不足为止. (见下图)

少于1000个元素,这个问题不会发生.我想知道你是否有人看到过这样的事情.

编辑

这是仪器的一些数据

解决方法

您可以做的一项改进是使用 fetchBatchSize.

来自Apple Doc“

When the fetch is executed,the entire request is evaluated and the
identities of all matching objects recorded,but no more than
batchSize objects’ data will be fetched from the persistent store at a
time. The array returned from executing the request will be a proxy
object that transparently faults batches on demand. (In database
terms,this is an in-memory cursor.)

您还可以使用fetchLimit和fetchOffset来实现分页.

干杯,亚历山德罗

猜你在找的iOS相关文章