加载UICollectionView单元格而不重用

时间:2015-09-14 21:39:35

标签: ios objective-c uicollectionview

我有一个只显示三个单元格的collectionView。每个单元格都与我在storyboard中设置的自定义collectionViewCell类型相同。我只希望每个单元格只实例化一次;没有重复使用。

如何从cellForItemAtIndexPath:datasource方法返回未重用的单元格?有可能这样做吗?

2 个答案:

答案 0 :(得分:2)

重复使用UICollectionViewCell并不意味着您将摆脱之前不再出现在屏幕上的内容。

这是一个内存效率的结构化流程,以及它的工作原理:

  1. 根据您需要的UICollectionViewUICollectionViewLayout会自动生成不同数量的单元格。
  2. 这些单元格基于UIScrollView构建, 重用 ,而不是为最终出现的每个单元格分配内存。
  3. 想象数据集是" wheel"它的大小取决于您需要创建的单元格数。
  4. 让我们说你的" wheel"总共有100种不同的观点"将填充单元格
  5. 如果屏幕一次只能显示5个,那么加载所有100个屏幕是没有意义的......只有 5 才会在视图中,并且准备好在您滚动时进入屏幕..
  6. 通过使用UICollectionViewDataSource协议,您的集合视图会重新填充刚刚离开屏幕的单元格,并将其放在显示列表的下方或上方,以便重复使用"而不是造成记忆问题。
  7. 集合视图非常高效,我建议使用内置的内存保存dequeuereusablecellwithidentifier

    现在,回答你的问题:

    您可以通过在UICollectionViewCell内的单元格内放置您需要的必要数据(可能需要NSArray的子类)来获得您想要的结果。

    您将使用cellForItemAtIndexPath访问每个对象(在我们的示例中为1 - 100)并且作为滚动,重用单元格的基本原则将显示需要显示的NSArray对象。

    我希望这是有道理的,它可以帮助您解决问题!

答案 1 :(得分:-1)

使用属性:

@property (nonatomic, strong) UICollectionViewCell *firstCell;
@property (nonatomic, strong) UICollectionViewCell *secondCell;
@property (nonatomic, strong) UICollectionViewCell *thirdCell;

在viewDidLoad中你可以创建它:

 self.firstCell = [[UICollectionViewCell alloc] init];
// Do you need...

您的委托方法如下:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.row) {
    case 0:
        return self.firstCell;
        break;
    case 1:
        return self.secondCell;
        break;
    case 2:
        return self.thirdCell;
        break;

    default:
        return nil;
        break;
}

}