1

我有一个包含 7-8 个不同单元格的集合视图。单元在 XIB 文件中构建。然后在视图控制器中我使用:

  [self.collectionView registerNib:[UINib nibWithNibName:name bundle:nil] forCellWithReuseIdentifier:name];

一切都按预期工作,但存在一些性能问题。在第一个滚动集合视图中,随着单元格的出现明显滞后。在所有类型的单元格至少加载一次之后,一切都开始顺利滚动。细胞并不复杂。

:为什么你甚至为此使用 XIB,为什么不在情节提要中制作原型单元?
:在整个应用程序的不同集合视图中使用相同的单元格。这样我就可以在 xib 中对单元格应用一次更改。我想不出更简单的解决方案来做到这一点。

我很确定UINib在加载后会被缓存,这就是它停止滞后的原因。例如,我想知道是否有办法在启动屏幕上预加载这些 xib。这将需要一两秒钟,但会带来更流畅的体验。

4

1 回答 1

0

UINib一旦加载就会被缓存,有很多原因可能会导致滚动滞后:

  • 你在做一些复杂的布局计算吗?
  • 您是在单元格中设置巨大的图像还是在主线程上执行密集任务以调整它们的大小?
  • 你有复杂的透明胶片吗?
  • 您是否正在做一些需要离屏渲染的事情,例如cornerRadiuslayer?

使用工具您可以真正检查大多数这些问题,例如Time Profiler将帮助您检查是否有东西阻塞了 UI,使用模拟器您可以激活颜色混合层来搜索透明度(红色)和颜色屏幕外渲染以检查屏幕外渲染视图(黄色)

于 2015-12-30T15:39:51.623 回答