效率低下的UICollectionView ......如何优化?

时间:2014-05-03 09:52:52

标签: objective-c ios7 uicollectionview

我正在实施UICollectionView

collectionView:cellForItemAtIndexPath:方法中,我正在分配一个带有少量插座和一些自定义按钮,标签,文本视图的类(因此,为每个自定义按钮和标签调用drawRect)。 / p>

每当每个单元格出现在屏幕上时,都会调用alloc init ...导致滚动不稳定。

我的问题是是否有更有效的实施。我理解dequeueReusableCellWithReuseIdentifier: forIndexPath:是导致这种情况的原因(我认为),我理解它的重点,但是我可以比现在更优化一点吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

三件事:

  1. 确保单元格不透明(及其所有子视图)。根据我的经验,这是UICollectionViews中滚动延迟的首要原因。摆脱任何透明胶片是最可能的罪魁祸首。
  2. 如果失败,请转到模拟器中的“调试”菜单,然后选择“颜色混合层”。这将突出显示隐藏在Alpha通道中并重新绘制的红色图层。
  3. 如果失败,请尝试使用“乐器”中的“核心动画”工具,查看帧速率正在斩波的位置。也可以使用时间分析器找到你的热点。
  4. 我很确定#1和#2会给你你需要的东西,但这是一个非常常见的错误。

答案 1 :(得分:1)

我必须补充说,另一个罪魁祸首是UITextView。我有UITextView s链接检测,并且由于iOS 7中的错误,我每次都必须nil文本属性...似乎这会导致大量CPU占用,导致丢帧

我的情况(最多20 UITextViews)的简单修复是在计算单元格的高度时缓存它们。我正在考虑缓存textStorage,但现在这样做。