ios - 加载 UICollectionView 单元而不重用

标签 ios objective-c uicollectionview

我有一个只显示三个单元格的 collectionView。每个单元格都属于我在 Storyboard 中设置的同一类型的自定义 collectionViewCell。我只希望每个单元实例化一次,而且只实例化一次;不重复使用。

如何从 cellForItemAtIndexPath: 数据源方法返回未重复使用的单元格?可以这样做吗?

最佳答案

重用 UICollectionViewCell并不意味着您要摆脱以前不再出现在屏幕上的那些。

这是一个提高内存效率的结构化流程,其工作原理如下:

  1. UICollectionView 自动生成了不同数量的单元格基于 UICollectionViewLayout你需要。
  2. 这些细胞建立在 UIScrollView 之上重用它们,而不是为最终会出现的每个单元格分配内存。
  3. 将数据集想象成一个“轮子”,它的大小取决于您需要创建的单元格数量。
  4. 假设您的“轮子”共有 100 个不同的“ View ”将填充单元格
  5. 如果屏幕一次只能显示 5 个,则加载所有 100 个是没有意义的...只加载 View 中的 5 和准备进入的那些滚动屏幕..
  6. 通过使用 UICollectionViewDataSource协议(protocol),您的 Collection View 会重新填充刚刚离开屏幕的单元格,并将其放在显示列表的下方或上方以“重用”,而不是导致内存问题。

Collection Views 非常高效,我建议使用它们内置的内存节省 dequeuereusablecellwithidentifier .

现在,回答你的问题:

通过将所需的必要数据放入 UICollectionViewCell 中的单元格(如果需要,可以创建 NSArray 的子类),您将获得想要的结果。 .

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

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

关于ios - 加载 UICollectionView 单元而不重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32574376/

相关文章:

ios - UITextView 可以从 NSTextAttachment 显示什么样的 NSData?

iphone - iOS NSNotification 相当于事件吗?

iphone - 知道歌曲何时播放完毕

ios - 创建后一段时间在 UICollectionView 的 Header View 上调用方法

ios - 以编程方式选择尚未加载的 UICollectionView 单元格

iphone - 添加由主音量控制的声音

iphone - 如何找出一个图像是否存在于一个包中?

iOS 7 与 iOS 8 约束大小不同

ios - 将 UIScrollView 滚动到固定范围

ios - UICollectionViewCell 奇怪的行为。单元格未正确更新图层