从单元格中删除子视图的CollectionView dequeCell使视图显得缓慢

时间:2015-06-25 05:16:36

标签: ios objective-c

我有代码:

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {

    return 30;
}

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return 1;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:REUSE_IDENTIFIER forIndexPath:indexPath];
    [[cell subviews]
     makeObjectsPerformSelector:@selector(removeFromSuperview)];
     [cell addSubview:someView];
    return cell;
}
  • 以上代码在viewWillAppear
  • 中执行
  • 如果我执行上述代码30次,则视图外观非常慢。

  • 由于单元格重用,我需要调用removeFromSuperView。否则,单元格上会显示过时的错误数据。

我无法弄清楚可能导致缓慢的原因??

你能提供提示吗?

1 个答案:

答案 0 :(得分:1)

您的外观很慢,因为您正在遍历单元格中的所有子视图并从superview中删除。这是一个非常昂贵的过程,不应该在collectionView数据源的cellForItemAtIndexPath方法中完成/事实上,永远不应该这样做。如果需要显示相关内容,则需要访问单元格实例并更新单元格中UI元素的属性。