2014-05-03 50 views
1

我正在实施UICollectionView效率低下UICollectionView ...如何优化?

collectionView:cellForItemAtIndexPath:方法,我的alloc INITING一类带插座的少数和定制按钮,标签textviews(这样的drawRect被调用用于每个这些自定义按钮和标签的)少数。

每当每个单元出现在屏幕上时,alloc init就会被调用...导致滚动波动。

我的问题是是否有更高效的实施。据我所知,dequeueReusableCellWithReuseIdentifier: forIndexPath:是这个原因(我认为),我理解它的重点,但是有可能比我现在有更多的优化吗?

感谢您的帮助!

+3

你可以发布'collectionView:cellForItemAtIndexPath:'的实现吗? – KudoCC

+2

不能在没有看到您的代码的情况下优化您的代码。 – dasblinkenlight

+0

init方法会每次调用,coz单元格是可重用的。 –

回答

6

三件事:

  1. 确保细胞是不透明的(以及所有它的子视图的一起)。根据我的经验,这是UICollectionViews中滚动滞后的头号原因。摆脱任何透明度作为最可能的罪魁祸首。
  2. 如果失败,请转到模拟器中的调试菜单,然后选择“颜色混合图层”。这将突出显示红色的图层,这些图层正在潜入Alpha通道并被重绘。
  3. 如果失败,请尝试使用乐器中的Core Animation工具,并查看帧速率正在下降的位置。使用时间分析器以及找到你的热点。

我很肯定#1和#2会给你你需要的东西,但这是一个非常常见的错误。

+0

真棒谢谢你! – user330739

1

我得补充说另一个大罪魁祸首是UITextView。我有UITextView s链接检测,并由于在iOS 7中的错误,我不得不nil文本属性每次...看起来像这会导致大量的CPU Hogging,导致丢帧。

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