在做了一些调试之后,我发现以下代码使我的应用程序的内存使用量不断增长,直到应用程序崩溃。当我启动应用程序时,内存使用量约为 2MB,然后当我不断来回滚动时,它继续增长。当我停止滚动一秒钟时,内存使用量会减少(虽然不是很严重,例如从 50M 减少到 35M)。请看看我为什么有:
这发生在我的自定义 UICollectionViewController 子类中:
for (myAppCell *cell in [self.collectionView visibleCells])
{
UILabel *label [[UILabel alloc] initWithFrame:CGRectMake(10, 10, cell.frame.size.width, cell.frame.size.height)];
label.text = @"Hello World!";
[cell.contentView addSubview:label];
}
现在这里是我在调试时所做的观察:
[cell.contentView addSubview:label
) 时,应用程序也正常运行。所以一定是这条线。 现在我没有发布代码的剩余部分,因为正如我所说,当我注释掉内部块时,应用程序正常运行 - 也就是说,它创建了我的单元格,当我滚动时没有问题(内存保持在 2.1MB)。
可能是什么问题呢?
编辑
此代码位于我的
CustomCollectionViewController
的 reloadData
方法中。它是从 scrollViewDidEndDecelerating
方法调用的。 最佳答案
因为每当您滚动集合 View 时,您都会一次又一次地向该 View 添加 UILable
。这将增加内存。在添加新 View 之前,您可以简单地从该单元格中删除所有现有 View 。
使用此代码删除所有 subview
[[cell.contentView subviews]
makeObjectsPerformSelector:@selector(removeFromSuperview)];
关于ios - UICollectionView 迭代单元格 - 内存警告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22191361/