Основной вопрос заключается в том, «сколько UIViewControllers вы можете добавить в стек навигации?» не вызывая предупреждения памяти или не зарабатывая сторожевой таймер.
Предположим, у меня есть приложение, которое в основном представляет собой базу данных для трех сущностей, где каждая может иметь связь с какой-то другой сущностью, и эта связь показана на UIViewController. Пользователи могут следовать этим отношениям, и каждый из них вызывает новый контроллер - если объектами являются A, B и C и A-> B-> C-> B-> C-> A, тогда каждый вид представления находится в стеке дважды , Я понимаю, как нажимать и извлекать, как возвращаться к определенному контроллеру, и я думаю, что вместо того, чтобы просто расширять стек навигации до бесконечности, лучше использовать контроллер представления в стеке навигации.
Чтобы сделать это, каждый раз, когда мне нужен был FirstEntityViewController, я мог сканировать стек навигации, чтобы найти объект, где [self isKindOfClass:[FirstEntityViewController class]];
, а затем вызывать методы, предназначенные для перенастройки этого представления для того, что я в данный момент хочу видеть, - просто обновляя данные в так же, как при повторном использовании UITableViewCell.
Это хорошо, за исключением эффекта, который он может оказать на NavigationController. Если я использую UINavigationController:popToViewController:animated:
, я думаю, что будет отброшено все, что выше представления, к которому я обращаюсь, включая представление, которое пользователь ожидает найти, нажав «Назад» на панели навигации. Таким образом, пользователь перебирает отношения, переходит назад и говорит «а?»
Если я удаляю соответствующий контроллер из стека навигации, а затем вставляю его в верхнюю часть стека, поведение «назад» остается в порядке, пока пользователь не вернется так далеко, как экземпляр FirstEntityViewController, который был перемещен или иначе опять навигация покажется противоречивой.
Является ли правильным решением удалить контроллер из стека и каким-то образом удерживать место в стеке, чтобы при извлечении повторно использованного контроллера его можно было вернуть обратно туда, откуда он пришел? Должен ли я вести свой собственный список видов и отображения данных, чтобы при выводе на экран я мог заменить представление под представлением, которое должно появиться, оставаясь на шаг впереди от обратной навигации?
Или это слишком сложно? Не нужно ли даже беспокоиться об этой ситуации, потому что ОС многократно использует большую часть контроллеров представлений так же, как многократно используются UITableViewCells, и при использовании стека навигации с глубиной 50 не влияет реальная память или производительность?