使用UITextView的UICollectionView非常慢

时间:2013-09-13 21:01:25

标签: ios uicollectionview

我有一个UICollectionView,带有自定义UICollectionViewCell。 每个单元格里面都有一个UITextView。 问题:UICollectionView非常慢,也在模拟器中。

-(void)viewDidLoad
{
[self.collectionView registerClass:[AgendaCollectionCell class]
         forCellWithReuseIdentifier:agendaCellIdentifier];
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {


 AgendaCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:agendaCellIdentifier forIndexPath:indexPath];

cell.delegate = self;
cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;
[cell setCurrentDateAtIndex:([indexPath row]) date:currentMonth events:events];


// Return the cell
return cell;

}

我检查过探查器

enter image description here

每个单元格都会进行与日期相关的计算。 如您所见,loadNibNamed需要花费太多时间来加载。 UITextView也需要太多。 我在这里搜索了很多问题并使用了他们的一些答案。(我还缓存了NSCalendar的所有实例)。我不明白为什么加载需要大约435毫秒。 UICollectionView有40个单元格(它包含一个月的日期)。 我是否应该放弃使用UICollectionView并使用drawRect转换为自定义视图?

修改 我认为答案中建议的一个好处是:使用UNib加载单元格而不是registerClass。我可以看到一个非常大的性能提升:从400ms到98ms!

1 个答案:

答案 0 :(得分:1)

尝试放

UINib * nib = [UINib nibWithNibName:@"YourNibName" bundle:[NSBundle mainBundle]];
[self.collectionView registerNib:nib forCellWithReuseIdentifier:@"MyCell"];

进入viewDidLoad,然后再自己创建单元格(在

中)
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForIndexPath:(NSIndexPath *)indexPath;

实施始终致电

UICollectionViewCell * cell = [collectionView dequeueCell...]

这样,我认为collection view只会加载一次笔尖(在viewDidLoad方法中,然后在需要时创建它的副本。