我正在创建一个使用UICollectionView
的项目。当用户选择一个单元格时,会将其滑动到另一个类似性质的UICollectionView
。我一直注意到,无论我如何处理,最终都会消耗大量内存。
我一直在尝试将UICollectionView
放在整页UICollectionViewCell
中,以便利用UICollectionViews
的可重用性。这种方法的缺点是保留内存,因为CollectionView从未完全释放。我也听说,将UICollectionView
放在UICollectionView
中不是最佳实践。
我尝试了UIPageViewController
包含UIViewController
且内部UICollectionView
的情况。由于UIViewController
可以在用户向后滑动时重新分配,因此更高效,但是只要用户继续选择单元格并创建新的视图控制器,内存就会像山一样无限增长。
作为一种混合方式,我也尝试将包含UICollectionView
的ViewController放在UICollectionViewCell
上。这种方法似乎效果最好,但是随着用户滑动,我不得不手动取消分配视图控制器。
有没有人可以推荐的适合该问题的策略或库。我怎样才能减少内存。我知道我需要某种可重用的视图。
到目前为止,我一直在研究此库,在此先感谢您的所有建议
答案 0 :(得分:1)
我想我明白您的意思。您有一个UICollectionView
,可以向下钻取到另一个UICollectionView
,保留第一个及其备份数据,直到您回来并弹出它为止。进一步钻取,并进一步分配越来越多的内存,直到退出。
我会尽量简化。将UICollectionView
放入UICollectionViewCells
内之类的解决方案可能会导致您的代码不必要地变得复杂,从而导致新问题和代码,这对程序员不利。如果最有效的用户体验是可以无限钻取的集合视图用户界面,则可以使用该范例。
您遇到的问题不是UICollectionViews,
,而是管理备份数据的内存使用情况。这可以通过几种方法来完成。知道您拥有的数据量如此之大以及“大数据”的含义会有所帮助,但这是我想到的一些方法。
一个想法是当您进入下一个屏幕时,卸载所有大数据。例如,如果您的数据源使用带有一堆大图像的数组,则在下一个视图被按下时将其清除。当视图再次出现时重新加载数据,或者在视图的单元格需要它时懒惰地重新加载数据,以最适合您的方式。这将是最简单的方法,并且可能会解决您的内存问题。
第二种方法是使用一个UICollectionView
并使用自定义动画,因此看起来新的收藏夹视图正在从旧的收藏夹视图中推送/弹出,而实际上您只是在更改收藏夹的数据查看并重新加载。您甚至可以提供比推送/弹出更有趣的动画。
在这两种方法中,您都可以实施UICollectionView
预取API调用以在需要之前加载数据。这样可以进一步减少内存占用。
所有这些方法都假定您可以加载数据以从存储中显示-不仅是最近的Web服务请求在内存中。如果您的应用程序必须不断不断地从网络上请求相同的大数据,则可以确保为用户带来惨痛的体验。因此,如果您尚未将数据存储在本地,请设置一个缓存。
无论采用哪种方法,您都可以在不采用库的情况下进行处理。 UICollectionViews
被设计为对内存友好的。您的问题实际上是在确定管理备份数据的内存使用的最佳方法。