什么是创建无限数量的滑动UICollectionViews的最节省内存的方法

时间:2019-04-05 02:04:16

标签: ios swift memory-management memory-leaks uicollectionview

我正在创建一个使用UICollectionView的项目。当用户选择一个单元格时,会将其滑动到另一个类似性质的UICollectionView。我一直注意到,无论我如何处理,最终都会消耗大量内存。

我一直在尝试将UICollectionView放在整页UICollectionViewCell中,以便利用UICollectionViews的可重用性。这种方法的缺点是保留内存,因为CollectionView从未完全释放。我也听说,将UICollectionView放在UICollectionView中不是最佳实践。

我尝试了UIPageViewController包含UIViewController且内部UICollectionView的情况。由于UIViewController可以在用户向后滑动时重新分配,因此更高效,但是只要用户继续选择单元格并创建新的视图控制器,内存就会像山一样无限增长。

作为一种混合方式,我也尝试将包含UICollectionView的ViewController放在UICollectionViewCell上。这种方法似乎效果最好,但是随着用户滑动,我不得不手动取消分配视图控制器。

有没有人可以推荐的适合该问题的策略或库。我怎样才能减少内存。我知道我需要某种可重用的视图。

到目前为止,我一直在研究此库,在此先感谢您的所有建议

Parchment Library

1 个答案:

答案 0 :(得分:1)

我想我明白您的意思。您有一个UICollectionView,可以向下钻取到另一个UICollectionView,保留第一个及其备份数据,直到您回来并弹出它为止。进一步钻取,并进一步分配越来越多的内存,直到退出。

我会尽量简化。将UICollectionView放入UICollectionViewCells内之类的解决方案可能会导致您的代码不必要地变得复杂,从而导致新问题和代码,这对程序员不利。如果最有效的用户体验是可以无限钻取的集合视图用户界面,则可以使用该范例。

您遇到的问题不是UICollectionViews,,而是管理备份数据的内存使用情况。这可以通过几种方法来完成。知道您拥有的数据量如此之大以及“大数据”的含义会有所帮助,但这是我想到的一些方法。

一个想法是当您进入下一个屏幕时,卸载所有大数据。例如,如果您的数据源使用带有一堆大图像的数组,则在下一个视图被按下时将其清除。当视图再次出现时重新加载数据,或者在视图的单元格需要它时懒惰地重新加载数据,以最适合您的方式。这将是最简单的方法,并且可能会解决您的内存问题。

第二种方法是使用一个UICollectionView并使用自定义动画,因此看起来新的收藏夹视图正在从旧的收藏夹视图中推送/弹出,而实际上您只是在更改收藏夹的数据查看并重新加载。您甚至可以提供比推送/弹出更有趣的动画。

在这两种方法中,您都可以实施UICollectionView预取API调用以在需要之前加载数据。这样可以进一步减少内存占用。

所有这些方法都假定您可以加载数据以从存储中显示-不仅是最近的Web服务请求在内存中。如果您的应用程序必须不断不断地从网络上请求相同的大数据,则可以确保为用户带来惨痛的体验。因此,如果您尚未将数据存储在本地,请设置一个缓存。

无论采用哪种方法,您都可以在不采用库的情况下进行处理。 UICollectionViews被设计为对内存友好的。您的问题实际上是在确定管理备份数据的内存使用的最佳方法。