在UICollectionView中从XIB加载多个单元格会在第一次加载

时间:2015-12-30 14:29:05

标签: ios objective-c xcode caching uinib

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

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

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

:为什么你甚至使用XIB,为什么不在故事板中使用原型? A :整个应用中的不同集合视图中使用相同的单元格。这样我就可以在xib中对单元格应用一次更改。我无法想出更容易的解决方案。

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

1 个答案:

答案 0 :(得分:0)

UINib一旦加载就被缓存,有很多原因会导致滚动延迟:

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

使用乐器可以真正检查大多数问题,例如Time Profiler将帮助您检查是否有东西阻挡了UI,使用模拟器可以激活颜色混合图层进行搜索透明胶片(红色)和彩色离屏幕渲染以检查屏幕外渲染视图(黄色)