swift - iOS - Collection View 是否将每个单元格都保存在内存中?

标签 swift uicollectionview out-of-memory

我有一个包含 6 种不同类型单元格的垂直 Collection View ...我观察到,当我滚动时,正在从服务器获取新帖子,(我正在使用分页机制(我正在获取 20到 20)) 应用程序崩溃并显示日志 Message from debugger: Terminated due to memory issue

我还注意到,当分配的 RAM 超过 1 GB 时会发生这种情况,这很疯狂,因为在任何给定时间大约有 3 个帖子出现...当获取 400 多个帖子时会发生这种情况!

我想当一个单元格不在 View 中时, Collection View 会释放它。是对的吗?因此,如果一个单元格有一个图像,我在它即将呈现时下载/缓存,然后该单元格不再可见,因为我滚动了,那么图像不应该在内存中。对吧?

编辑 1:

我在代码中所做的是检查 willDisplay cell 将要显示的单元格是否是最后一个单元格。如果是,那么我将请求服务器将接下来的 20 个帖子(如果有的话)带给我。当它出现时,我将新帖子附加到 posts 数组。之后我只是重新加载 Collection View 。

编辑 2:

我正在使用 Parse SDK 中的 PFImageView 作为缓存机制

最佳答案

不,它们被重复使用。

图像可能在缓存中,这可能是导致您使用大量内存的原因。它们应该在必要时从内存中删除,如果你想从头开始实现它,你可以在 NSCache 上搜索。

我建议使用 SDWebImageKingfisher 来有效地下载和缓存图像。

Collection views employ a view recycling program to improve efficiency. As views move offscreen, they are removed from view and placed in a reuse queue instead of being deleted. As new content is scrolled onscreen, views are removed from the queue and repurposed with new content.

文档: https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/CollectionViewPGforIOS/CollectionViewBasics/CollectionViewBasics.html

关于swift - iOS - Collection View 是否将每个单元格都保存在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54554006/

相关文章:

Swift:无法下标类型为 'Array' 的值

swift - 在自动调整大小的 Collection View 中插入行 - 故障

ios - 无法更改 UICollectionview 中的 View 颜色

ios - 如何禁用collectionview弹跳效果而不影响刷新控制功能?

android - WebView 中的大图像导致内存不足

java - 如何在 Java 内存密集型应用程序中避免 OutOfMemory 异常?

ios - 如何从 UITextField 将数据推送到 firebase 存储

ios - subpathsAtPath 与 subpathsOfDirectoryAtPath

java - 即使将堆大小增加到最大值后,Jmeter 也会出现超过 2000 个线程的 java.lang.OutOfMemoryError

swift - UICollectionView 单元格间距相等