Мне кажется, я понимаю, что вы говорите.У вас есть UICollectionView
, который можно развернуть до другого UICollectionView
, оставив первое и его вспомогательные данные сохраненными, пока вы не вернетесь и не вытолкнете его.Развертывание все дальше и дальше выделяет все больше и больше памяти, пока вы не отступите.
Я бы сделал все как можно проще.Такие решения, как размещение UICollectionView
внутри UICollectionViewCells
, могут привести к излишнему усложнению вашего кода, что приведет к новым проблемам и коду, враждебному программисту.Если пользовательский интерфейс, который работает лучше всего, представляет собой пользовательский интерфейс представления коллекции, в который вы можете углубляться до бесконечности, то используйте эту парадигму.
Ваша проблема не в UICollectionViews,
, а в управлении использованием памяти ваших резервных данных.Это можно сделать несколькими способами.Было бы полезно узнать, какие у вас данные такого большого размера и что означает «большой», но вот несколько подходов, которые приходят на ум.
Одна из идей - выгрузить большие данные, когда выперейти к следующему экрану.Например, если ваш источник данных использует массив с кучей больших изображений, удалите их при нажатии следующего представления.Перезагрузите данные, когда ваше представление появится снова, или сделайте это лениво, когда ячейки представления нуждаются в этом, в зависимости от того, что вам больше подходит.Это был бы самый простой подход и, вероятно, позаботился бы о проблемах с памятью.
Второй подход - использовать один UICollectionView
и использовать пользовательские анимации, чтобы выглядело, как будто новое представление коллекции выталкивает / выталкивает изстарый, когда на самом деле вы просто меняете данные для представления коллекции и перезагружаете.Вы могли бы даже предоставить анимацию, которая более интересна, чем нажатие / выталкивание.
Помимо любого из этих подходов, вы можете реализовать вызовы API предварительной выборки UICollectionView
для загрузки данных непосредственно перед тем, как они вам понадобятся.Это еще больше уменьшит объем используемой памяти.
Все эти подходы предполагают, что вы можете загружать данные для отображения из хранилища - что они не только в памяти из-за недавних запросов веб-службы.Вашим пользователям гарантирован ужасный опыт, если вашему приложению приходится многократно запрашивать одни и те же большие данные из Интернета.Итак, если у вас нет данных, хранящихся локально, настройте кеш.
Независимо от подхода, это то, что вы должны уметь обрабатывать, не принимая библиотеку.UICollectionViews
предназначены для памяти.Ваша проблема заключается в определении наилучшего способа управления использованием вашей резервной копии данных.