我有一个带有自定义 UICollectionViewCell 的 UICollectionView。每个单元格内部都有一个 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;
}
我检查了探查器
每个单元格都会进行与日期相关的计算。如您所见,loadNibNamed 加载时间过长。UITextView 也需要太多。我在这里搜索了很多问题并使用了他们的一些答案。(我还缓存了 NSCalendar 的所有实例)。我不明白为什么加载大约需要 435 毫秒。UICollectionView 有 40 个单元格(它包含一个月中的天数)。我应该放弃使用 UICollectionView 并使用 drawRect 转换为自定义视图吗?
编辑 我认为答案中建议的一点是:使用 UNib 而不是 registerClass 加载单元格。我可以看到一个非常大的性能提升:从 400 毫秒到仅 98 毫秒!