Iphone NSFetchedResultsController和executeFetchRequest之间是否存在UITableView性能差异?

Iphone NSFetchedResultsController和executeFetchRequest之间是否存在UITableView性能差异?,iphone,ios,uitableview,core-data,datasource,Iphone,Ios,Uitableview,Core Data,Datasource,我有一个iPad应用程序,它由Core Date支持,并在UITableView中显示数据。我还使用自定义单元格显示每个单元格的多个Ulabel 它工作得很好,但是当许多项目被添加到tableView时,它会陷入停滞,感觉有点迟钝。我当前没有使用NSFetchedResultsController。每当对数据进行更改时,ivar阵列的数据都会按如下方式刷新: items = [self.managedObjectContext executeFetchRequest:allItems error

我有一个iPad应用程序,它由Core Date支持,并在UITableView中显示数据。我还使用自定义单元格显示每个单元格的多个Ulabel

它工作得很好,但是当许多项目被添加到tableView时,它会陷入停滞,感觉有点迟钝。我当前没有使用NSFetchedResultsController。每当对数据进行更改时,ivar阵列的数据都会按如下方式刷新:

items = [self.managedObjectContext executeFetchRequest:allItems error:&error];
Items是tableView从中提取所有数据的数组,所有内容都会更新并工作。但它不是超快的!我的方法有问题吗?NSFetchedResultsController是唯一的方法吗?委托/数据源方法中正在进行的处理没有那么繁重。基本上是从数组中提取值并将其设置为UILabels

一切都按照我现在需要的方式运行,我只需要它更具响应性


谢谢使用仪器。总是。永远

最有可能的是,您至少需要模仿FRC所做的一些批处理和前瞻性思维。但是,您可能会发现您总是在访问关系,预取它们可能会解决您的问题

一切都是纯粹的猜测,没有硬,冷,数字。。。你可以很容易地从仪器上得到

编辑

绘制单元格可能会减慢速度。然而,在数量较少的物体上也可以观察到这一点。若您的数据和其他单元格存在显著差异,通常只会看到由于绘图而导致性能降低

当然,现在假设您正在使用单元重用。如果你没有重复使用你的细胞,那么所有的赌注都没有了。但是,对于单元重用,您通常不应该看到相对于对象数量的性能


再次,运行仪器。这是知道你的问题所在的唯一方法。其他一切都是浪费时间。

使用仪器。总是。永远

最有可能的是,您至少需要模仿FRC所做的一些批处理和前瞻性思维。但是,您可能会发现您总是在访问关系,预取它们可能会解决您的问题

一切都是纯粹的猜测,没有硬,冷,数字。。。你可以很容易地从仪器上得到

编辑

绘制单元格可能会减慢速度。然而,在数量较少的物体上也可以观察到这一点。若您的数据和其他单元格存在显著差异,通常只会看到由于绘图而导致性能降低

当然,现在假设您正在使用单元重用。如果你没有重复使用你的细胞,那么所有的赌注都没有了。但是,对于单元重用,您通常不应该看到相对于对象数量的性能


再次,运行仪器。这是知道你的问题所在的唯一方法。其他一切都是浪费时间。

NSFetchedResultsController
绝对是强烈推荐的。它不仅可能解决您的性能问题,还将带来各种方便的工具(如委托协议)和幕后优化

这些优化中最重要的可能是内存管理。您的解决方案(所有项都在一个数组中)似乎是一个糟糕的设计选择,无法扩展到大量记录/行

也就是说,在绘制单元格时,请使用常用的优化策略:

  • 尽量减少标签和其他子视图的使用
  • 不要使用透明背景
  • 不要使用1.0以外的字母
  • 在单元重叠中不包含子视图等

如果性能仍然是一个问题,您必须通过覆盖
UITableViewCell
子类的
drawRect
来自己绘制内容

强烈建议使用NSFetchedResultsController。它不仅可能解决您的性能问题,还将带来各种方便的工具(如委托协议)和幕后优化

这些优化中最重要的可能是内存管理。您的解决方案(所有项都在一个数组中)似乎是一个糟糕的设计选择,无法扩展到大量记录/行

也就是说,在绘制单元格时,请使用常用的优化策略:

  • 尽量减少标签和其他子视图的使用
  • 不要使用透明背景
  • 不要使用1.0以外的字母
  • 在单元重叠中不包含子视图等

如果性能仍然是一个问题,您必须通过覆盖
UITableViewCell
子类的
drawRect
来自己绘制内容

在进行任何更改之前,请使用仪器对应用程序进行配置,并找出花费的时间。绘图和获取核心数据一样容易。同意jrturton,尽管你也可以输入一些常量,或者对所有行始终使用相同的项,而不需要获取-查看这是否与此有关,或者是否使用工具配置您的应用程序,并在进行任何更改之前找出花费的时间。绘图和核心数据获取一样容易。同意jrturton,尽管你也可以输入一些常量,或者在不需要获取的情况下,对所有行始终输入相同的项,看看这是否与之有关。我想你已经发现了我的一些问题。为什么阵列无法扩展?每个单元格当前都添加了4个UILabel作为子视图,在那里我可以做什么不同的事情?如果你能帮我找出更好的方法,那将是最有帮助的。谢谢当阵列必须容纳40个以上单元时,m