adi*_*dit 7 iphone objective-c ipad ios uicollectionview
我有一个UICollectionView自定义单元子类UICollectionViewCell.在代码中我做了以下事情:
[self.collectionView_ registerClass:[AHPinterestCell class]
forCellWithReuseIdentifier:@"AHPinterestCell"];
Run Code Online (Sandbox Code Playgroud)
这就是我的想法 cellForItem
AHPinterestCell *cell =
(AHPinterestCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"AHPinterestCell"
forIndexPath:indexPath];
Run Code Online (Sandbox Code Playgroud)
然而,它似乎并没有重复使用细胞.在我的每个屏幕的集合视图中,它显示大约9-10个单元格,但是当我进行无限滚动然后我调用insertItemsAtIndexPath它调用initWithFrame我的自定义单元格上的方法时,它应该重用我已经拥有的单元格.为什么是这样?
编辑:
我正在添加一个说明问题的示例演示项目,可以在此处找到xcode项目的链接.它实际上是在你到达底部时进行无限滚动,它只是在其中添加更多内容.但是当你这样做时,它会再次调用init方法.
简而言之,您的代码运行良好。正如预期的那样,当单元格滚出屏幕时,它们最终会被标记为可供重用。当您调用 时dequeueReusableCellWithReuseIdentifier,如果有一个单元格可供重用,它就会这样做。如果没有,它就会创建一个。
当您快速或连续滚动时,您会看到大量单元格被创建。但是,如果您进行短暂的小滚动,放开,暂停,让 UI 跟上并重复,那么您将看到创建的单元格非常少。
我将此解释为 iOS 优先考虑 UI 和新单元格的创建,而不是旧单元格的出队,从而允许它们重用。因此,如果您快速翻转,它就很难追上并将旧单元标记为可重复使用。这可能并不完全是坏事,因为这可能是集合视图如此流畅的原因。标记旧单元以供重用是 iOS 在这里要做的不太重要的事情之一。但显然,如果内存紧张,这可能是一个问题。
顺便说一句,如果你也放入NSLogin dealloc,你会注意到,当用户界面在集合视图中进行快速滚动后最终赶上时,它显然有一些逻辑说“哎呀,我有更多的空闲空间”。细胞比我真正需要的多,我将去掉其中一些。” 实际上,这是一个非常聪明的实现。注重速度,但一旦 UI 安静下来就会进行一些内存优化。
| 归档时间: |
|
| 查看次数: |
4641 次 |
| 最近记录: |