我有一个只显示三个单元格的 collectionView。每个单元格都属于我在 Storyboard 中设置的同一类型的自定义 collectionViewCell。我只希望每个单元实例化一次,而且只实例化一次;不重复使用。
如何从 cellForItemAtIndexPath: 数据源方法返回未重复使用的单元格?可以这样做吗?
最佳答案
重用 UICollectionViewCell
并不意味着您要摆脱以前不再出现在屏幕上的那些。
这是一个提高内存效率的结构化流程,其工作原理如下:
UICollectionView
自动生成了不同数量的单元格基于UICollectionViewLayout
你需要。- 这些细胞建立在
UIScrollView
之上重用它们,而不是为最终会出现的每个单元格分配内存。 - 将数据集想象成一个“轮子”,它的大小取决于您需要创建的单元格数量。
- 假设您的“轮子”共有 100 个不同的“ View ”将填充单元格
- 如果屏幕一次只能显示 5 个,则加载所有 100 个是没有意义的...只加载 View 中的 5 和准备进入的那些滚动屏幕..
- 通过使用
UICollectionViewDataSource
协议(protocol),您的 Collection View 会重新填充刚刚离开屏幕的单元格,并将其放在显示列表的下方或上方以“重用”,而不是导致内存问题。
Collection Views 非常高效,我建议使用它们内置的内存节省 dequeuereusablecellwithidentifier
.
现在,回答你的问题:
通过将所需的必要数据放入 UICollectionViewCell
中的单元格(如果需要,可以创建 NSArray
的子类),您将获得想要的结果。 .
您将使用 cellForItemAtIndexPath
访问每个对象(在我们的示例中为 1 - 100)并且随着你的滚动,复用单元格的基本原理会显示需要显示的NSArray对象。
我希望这是有道理的,它可以帮助您解决问题!
关于ios - 加载 UICollectionView 单元而不重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32574376/