Objective c 低效的UICollectionView。。。如何优化?

Objective c 低效的UICollectionView。。。如何优化?,objective-c,ios7,uicollectionview,Objective C,Ios7,Uicollectionview,我正在实现UICollectionView 在collectionView:cellForItemAtIndexPath:method中,我正在alloc初始化一个类,该类中有几个出口和几个自定义按钮、标签、文本视图,因此将为每个自定义按钮和标签调用drawRect 每次每个单元格出现在屏幕上,alloc init就会被调用。。。导致滚动不稳定 我的问题是,是否有更有效的实施方法。我知道dequeueReusableCellWithReuseIdentifier:forIndexPath:是造成

我正在实现UICollectionView

在collectionView:cellForItemAtIndexPath:method中,我正在alloc初始化一个类,该类中有几个出口和几个自定义按钮、标签、文本视图,因此将为每个自定义按钮和标签调用drawRect

每次每个单元格出现在屏幕上,alloc init就会被调用。。。导致滚动不稳定

我的问题是,是否有更有效的实施方法。我知道dequeueReusableCellWithReuseIdentifier:forIndexPath:是造成这种情况的原因,我也理解这一点,但有可能比我现在拥有的优化多一点吗

谢谢你的帮助

三件事:

确保单元及其所有子视图都是不透明的。根据我的经验,这是UICollectionViews中滚动滞后的第一个原因。最有可能的罪魁祸首是去除任何透明胶片。 如果失败,请转到模拟器中的“调试”菜单并选择“颜色混合层”。这将突出显示隐藏在alpha通道中并被重新绘制的红色层。 如果失败,请尝试Instruments中的Core动画工具,查看帧速率的变化。也可以使用时间分析器,找到您的热点。 我很确定1和2会满足您的需求,但这是一个非常常见的错误。

三件事:

确保单元及其所有子视图都是不透明的。根据我的经验,这是UICollectionViews中滚动滞后的第一个原因。最有可能的罪魁祸首是去除任何透明胶片。 如果失败,请转到模拟器中的“调试”菜单并选择“颜色混合层”。这将突出显示隐藏在alpha通道中并被重新绘制的红色层。 如果失败,请尝试Instruments中的Core动画工具,查看帧速率的变化。也可以使用时间分析器,找到您的热点。
我很确定1和2会提供您所需要的,但这是一个非常常见的错误。

我必须补充一点,另一个罪魁祸首是UITextView。我有带链接检测的UITextView,由于iOS 7中的一个bug,每次我都必须取消文本属性。。。似乎这会导致大量占用CPU,导致帧丢失


对于我的案例max 20 UITextView,一个简单的修复方法是在计算单元格高度时缓存它们。我也在考虑使用缓存的文本存储,但目前还可以使用。

我必须补充一点,另一个罪魁祸首是UITextView。我有带链接检测的UITextView,由于iOS 7中的一个bug,每次我都必须取消文本属性。。。似乎这会导致大量占用CPU,导致帧丢失


对于我的案例max 20 UITextView,一个简单的修复方法是在计算单元格高度时缓存它们。我也在考虑使用缓存的文本存储,但目前还可以使用。

能否发布collectionView:cellForItemAtIndexPath:的实现?如果不查看代码,就无法优化代码。每次都会调用init方法,coz cell是可重用的。您可以发布collectionView:cellForItemAtIndexPath:的实现吗?如果不查看您的代码,则无法优化代码。每次调用init方法时,因为Z cell是可重用的。