Это плохая практика, чтобы позволить UINavigationController выдвигать контроллеры представления, которые могут привести к повторяющемуся стеку? - PullRequest
5 голосов
/ 19 января 2012

Я создаю приложение с помощью UINavigationController, в который я помещаю UIViewControllers, и IBActions для одного из классов может вызвать толчок другого экземпляра первого типа:

ViewControllerType1 -> ViewControllerType2 -> ViewControllerType3 -> ViewControllerType1

Как вы можете видеть, в стеке нет конца.

Это плохая практика - иметь бесконечный цикл, подобный этому?Нужно ли использовать стек UINavigationController с «концом»?

Ответы [ 2 ]

3 голосов
/ 19 января 2012

Хорошо разрешить «цикл», если это то, что ожидает пользователь.

Если вы ожидаете (и хотите разрешить) пользователя создавать глубокие стеки, вы должны попытаться минимизировать количество приватных состояний.в каждом представлении контроллер.Например, если два контроллера представления в стеке показывают одинаковую информацию пользователю, вы должны сделать так, чтобы оба контроллера представления совместно использовали один и тот же базовый объект, содержащий эту информацию.

Вы также должны убедиться, что каждый контроллер представления выпускается какВо всяком случае, если он получает сообщение didReceiveMemoryWarning (если контроллер представления не находится на вершине стека).

0 голосов
/ 19 января 2012

Я бы сказал, что это не лучшая практика - это делает навигацию назад довольно громоздкой, если вы не реализуете функции, которые попадают в корень или, по крайней мере, низко в иерархии.

Кроме того, исходя из моего опыта, вы не должны быть абсолютно уверены в том, что счетчики хранения таких упорядоченных контроллеров рассчитаны правильно - я однажды попробовал подобный подход, и выскочив контроллер представления, он был освобожден, хотя технически все еще на стек.

Также - с точки зрения ресурсов это ужасно - вы не представляете, сколько у вас может быть контроллеров представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...