例如,我在数据库中有 10 000 个条目,我需要将它们显示到 UITableView 中。
所以,我应该设置所有 NSCoreData 的东西,创建 NSFetchRequest 和 NSFetchedResultsController。
然后我可以使用 [NSFetchedResultsController objectAtIndex] 方法访问 cellForRowAtIndexPath 中的这些条目。
问题是:
- NSFetchedResultsController 是否会以 LAZY 方式加载所有这些对象,只有在用户实际将 UITableView 滚动到相应的单元格之后?
- 只需将 NSFetchRequest 的 fetchBatchSize 设置为与屏幕上的单元格数相等的数字就足够了吗?
- 我应该使用单独的 NSManagedObjectContext 和后台线程来加载这些对象吗?在单独线程的情况下,[NSFetchedResultsController objectAtIndex] 方法如何工作,而它是从 Main-UI-thread 调用的?
- 我是否应该担心这些事情,而我只有 10k 个条目?
Best Answer-推荐答案 strong>
NSFetchedResultsController 为您解决所有问题。
- 延迟加载?事实上,FRC 会尽量做到延迟加载。没有什么让你做的。实际上,它针对滚动、速度、性能、内存使用进行了优化,应有尽有。
- 批量大小?不相关。你可以忘记它。如果您愿意,请设置性能测试并比较使用和不使用
batchSize 的情况。我预测您不会发现任何差异,或者可以忽略不计。 (如果有任何东西可能具有极高的滚动速度。)
- 单独的
NSManagedObjectContext ? 绝对不行。 NSFetchedResultsController 应该在主线程上使用。
- 担心记录数?您完全不必担心以上原因,尤其是延迟加载。我在 X00.000s 记录方面取得了很好的成绩。
关于ios - NSCoreData 条目获取的性能,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/32831667/
|