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

问题描述 投票:-1回答:1

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

我一直在尝试将UICollectionView放在整页UICollectionViewCell中,以便利用UICollectionViews的可重用性。这种方法的缺点是内存保留,因为CollectionViews从未完全取消分配。我也听说将UICollectionView放入UICollectionView并不是最好的做法。

我已经尝试过UIPageViewController包含UIViewController的内部UICollectionView。这更有效,因为当用户向后滑动时,UIViewController可以被释放,但只要用户继续选择单元格并创建新的视图控制器,内存就会像山一样无限地增长。

作为一个混合体,我尝试将包含UICollectionView的ViewControllers放在UICollectionViewCell上。这种方法看起来效果最好但我不得不在用户刷卡时手动取消分配视图控制器。

有没有任何人可以推荐的策略或库可以解决这个问题。如何保持记忆力下降。我知道我需要某种可重复使用的观点。

到目前为止,我一直在调查这个图书馆,提前感谢您的所有建议

Parchment Library

ios swift memory-management memory-leaks uicollectionview
1个回答
1
投票

我想我明白你在说什么。你有一个UICollectionView可以钻到另一个UICollectionView,留下第一个和它的支持数据保留,直到你回来并弹出它。进一步向下钻取并进一步分配越来越多的内存,直到退出为止。

我会让事情变得尽可能简单。将UICollectionView放在UICollectionViewCells中的解决方案可能会导致代码变得不必要地复杂化,从而导致新的问题和代码程序员充满敌意。如果最有效的用户体验是可以无限深入钻取的集合视图UI,那么请使用该范例。

您的问题不在于UICollectionViews,,而在于管理您的支持数据的内存使用。这可以通过几种方式完成。这将有助于了解您拥有哪种类型的数据,以及“大”意味着什么,但这里有几种方法可以想到。

当你进入下一个屏幕时,一个想法是卸载任何大数据。例如,如果您的数据源使用包含大量大图像的数组,则在按下下一个视图时将其清除。当您的视图再次出现时重新加载数据,或者在视图的单元格需要时懒洋洋地重新加载数据,无论哪种方式最适合您。这将是最简单的方法,可能会照顾您的记忆问题。

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

除了这些方法之外,您还可以在需要之前实现UICollectionView预取API调用以加载数据。这将进一步减少您的内存占用。

所有这些方法都假设您可以加载数据以从存储中显示 - 它不仅仅是来自最近的Web服务请求的内存。如果您的应用必须不断地从网上请求相同的大数据,那么您的用户将获得悲惨的体验。因此,如果您尚未在本地存储数据,请设置缓存。

无论采用何种方法,您都应该能够在不采用库的情况下处理这些问题。 UICollectionViews旨在记忆友好。您的问题实际上是确定管理支持数据内存使用的最佳方法。

© www.soinside.com 2019 - 2024. All rights reserved.