获取NSCoreData条目的性能

时间:2015-09-28 20:55:34

标签: ios objective-c multithreading uitableview core-data

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

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

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

问题是:

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

2 个答案:

答案 0 :(得分:1)

NSFetchedResultsController会照顾您的所有顾虑。

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

答案 1 :(得分:0)

  1. 如果正确设置批量大小。
  2. 我去了两倍左右
  3. 不要打扰,只需将其从主UI moc中删除
  4. 试一试,看看。 CD可以处理该音量,但仍然可以进行性能优化,这取决于您问题中没有的内容。