1

У меня есть LoginViewController (UIViewController), который, когда все критерии соблюдены и пользователь нажимает кнопку «Вход», запускает сеанс раскадровки, который толкает ProfileViewController (UIViewController). Когда это произойдет, у меня есть оператор log в моем методе dealloc LoginViewController, чтобы узнать, вызван ли он, и к моему разочарованию он никогда не вызывается. Мой вопрос заключается в том, следует ли это назвать? Кроме того, когда я вхожу в систему, иногда я получаю «предупреждение о принимаемой памяти», и иногда я не понимаю, что я нахожу странным, потому что я делаю то же самое в обоих случаях, но все же получаю предупреждение о памяти один раз, а не другой ,Если UIViewController освобождается при выполнении Push Segue

Любой может пролить свет на это, это было бы здорово!

Спасибо.

ответ

1

UINavigationController поддерживает стопку контроллеров. Вы начинаете с одного элемента, LoginViewController, в этом стеке. Когда вы нажимаете ProfileViewController, у вас теперь есть два элемента в стеке. LoginViewController не может быть освобожден до его удаления из стека.

Если вы хотите, чтобы ProfileViewController заменил LoginViewController на стек контроллера навигатора, вы можете написать собственный класс segue для реализации этого поведения. See this Q&A.

(Вы можете подумать, вы могли бы использовать «Заменить» или «Show Detail (например, заменить)» SEGUE типа в раскадровку, но только те работы, если вы используете UISplitViewController.)

+0

Спасибо за ответ. У меня также есть функция выхода из системы в моем ProfileViewController. Когда вы нажимаете кнопку «Выход», вы возвращаетесь в LoginViewController, и это делается через UnwindSegue. Если бы я заменил LoginViewController на ProfileViewController вместо того, чтобы добавлять его в стек, функция выхода из системы все равно работала бы так, как ожидалось, или это приведет к сбою? @rob mayoff –

+0

Если вы используете отключенный сеанс для возврата в 'LoginViewController', вам нужно оставить' LoginViewController' в стеке, и вы хотите, чтобы он оставался выделенным. Не похоже, что у вас действительно есть проблема. –

+0

Мое приложение работает отлично. Но когда я вижу «Полученное предупреждение о памяти» через 5 секунд после входа в систему и перехода к ProfileViewController, я начинаю думать, что у меня есть проблема @rob mayoff –

0

С поддержкой ARC, когда объект не ссылается, он будет выпущен.

Для отображения вида из ProfileViewController вы создаете экземпляр объекта в LoginViewController, и именно так вы можете видеть вид профиля после его представления. Если будет выпущен экземпляр LoginViewController, профиль профиля также будет выпущен (предположим, что никто не ссылается на него). По той же причине экземпляр LoginViewController не выпущен, потому что другой объект держит ссылку на него. Скажем, ваши взгляды представлены в Window ->ProfileViewController ->ProfileViewController, это окно, из которого экземпляр ProfileViewController освобождается.

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

Смежные вопросы