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

ppa*_*ojr 8 core-data objective-c uitableview ios

我有一个核心数据应用程序,在一个显示大量的实例UITableView.

我们mainQueueContext在主线程中privateQueueContext运行并在后台线程中运行.

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

[self.mainQueueContext mergeChangesFromContextDidSaveNotification:notification];
Run Code Online (Sandbox Code Playgroud)

触发呼叫需要几秒钟

-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller
Run Code Online (Sandbox Code Playgroud)

触发调用的是:

[self.tableView endUpdates];
Run Code Online (Sandbox Code Playgroud)

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

CPU处理过程中

endUpdates期间的内存消耗

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

编辑

这是仪器的一些数据 仪器数据显示endUpdates

ubi*_*Ale 1

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

\n\n

来自苹果文档”

\n\n
\n

执行提取时,将评估整个请求并记录所有匹配对象的身份,但一次从持久存储中提取的数据不会超过批量大小的对象\xe2\x80\x99。执行请求返回的数组将是一个代理对象,它可以根据需要透明地对批次进行故障处理。(在数据库术语中,这是内存中游标。)

\n
\n\n

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

\n\n

干杯,\n亚历山德罗

\n