【发布时间】:2019-03-11 02:41:51
【问题描述】:
我有一个集合视图,里面充满了来自服务器的大量数据:
细胞结构:
- 一张图片
- 每个单元格中有 2 行文本
基本上,我的集合布局类似于 - 一行(多行)中的 3 个单元格,带有圆角和阴影。 我面临的问题是,当我从服务器收到 30 多种产品时,我的内存使用量会增加到 200 MB,而在旧设备 (iOS 10.*) 上,我的屏幕会出现集合视图滞后。
我接收数据的方式是:
- 在
Interactor我请求产品的所有文本数据以及图像文件的链接, -
在我的集合视图
cellForItemAt中,我显示了这些数据,然后我开始使用这个库加载图像 - Kingfisherif url != nil { productsCell.productImage.kf.indicatorType = .activity productsCell.productImage.kf.setImage(with: url) } else { productsCell.productImage.image = clipImage } 我收到的图片大小在 4-6 Mb 之间。
我使用 VIPER 作为我的应用程序的架构并检查了内存泄漏,但一切似乎都很好。当我在其他屏幕上启动应用程序时,我的内存使用量约为 - 30 MB。所以我面临的主要问题是加载图像数据。 我在 Google 上搜索并阅读了许多关于优化的文章,但它们提供的大多是一般性建议,并没有像我在这里那样反映这种情况。 他们提供的是:
- 使用内存管理原则 - 完成
- 分页 - 不
在测试时我发现,如果我使用静态剪辑图像填充集合视图 - 内存使用量会下降到 ±100 MB
我想问一下:
- 是否有任何现成的集合视图解决方案已经优化以处理大量图像数据?我搜过github,但是大部分collectionviews框架都和Cutom Layouts有关。
- 如何在处理大量数据时减少内存使用量?
- 图像大小会导致这样的内存负载吗?
- 我可以避免使用分页,因为集合视图会重复使用单元格吗?
提前感谢您的帮助,祝您周末愉快!
【问题讨论】:
标签: ios swift memory-management memory-leaks uicollectionview