首页 > 解决方案 > iOS - 集合视图是否将每个单元格保留在内存中?

问题描述

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

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

我想当一个单元格不在视野范围内时,集合视图会释放它。那正确吗?因此,如果一个单元格有一个图像,我在它即将呈现时下载/缓存它,然后该单元格不再可见,因为我滚动了,那么该图像不应该在内存中。正确的?

编辑1:

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

编辑2:

我使用PFImageViewfromParse SDK作为缓存机制

标签: swiftuicollectionviewout-of-memory

解决方案


不,它们被重复使用。

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

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

集合视图采用视图回收程序来提高效率。当视图移出屏幕时,它们会从视图中移除并放置在重用队列中,而不是被删除。随着新内容在屏幕上滚动,视图会从队列中移除并重新使用新内容。

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


推荐阅读