OGeek|极客世界-中国程序员成长平台

标题: ios - NSCoreData 条目获取的性能 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 11:10
标题: ios - NSCoreData 条目获取的性能

例如,我在数据库中有 10 000 个条目,我需要将它们显示到 UITableView 中。

所以,我应该设置所有 NSCoreData 的东西,创建 NSFetchRequest 和 NSFetchedResultsController。

然后我可以使用 [NSFetchedResultsController objectAtIndex] 方法访问 cellForRowAtIndexPath 中的这些条目。

问题是:

  1. NSFetchedResultsController 是否会以 LAZY 方式加载所有这些对象,只有在用户实际将 UITableView 滚动到相应的单元格之后?
  2. 只需将 NSFetchRequest 的 fetchBatchSize 设置为与屏幕上的单元格数相等的数字就足够了吗?
  3. 我应该使用单独的 NSManagedObjectContext 和后台线程来加载这些对象吗?在单独线程的情况下,[NSFetchedResultsController objectAtIndex] 方法如何工作,而它是从 Main-UI-thread 调用的?
  4. 我是否应该担心这些事情,而我只有 10k 个条目?



Best Answer-推荐答案


NSFetchedResultsController 为您解决所有问题。

  1. 延迟加载?事实上,FRC 会尽量做到延迟加载。没有什么让你做的。实际上,它针对滚动、速度、性能、内存使用进行了优化,应有尽有。
  2. 批量大小?不相关。你可以忘记它。如果您愿意,请设置性能测试并比较使用和不使用 batchSize 的情况。我预测您不会发现任何差异,或者可以忽略不计。 (如果有任何东西可能具有极高的滚动速度。)
  3. 单独的 NSManagedObjectContext? 绝对不行。 NSFetchedResultsController 应该在主线程上使用。
  4. 担心记录数?您完全不必担心以上原因,尤其是延迟加载。我在 X00.000s 记录方面取得了很好的成绩。

关于ios - NSCoreData 条目获取的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32831667/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4