Как выгрузить всплывающий контроллер просмотра?

Использование иерархии представлений на основе навигации. У меня есть контроллер корневого представления и несколько контроллеров представления, которые отходят от одного и того же при нажатии кнопки. Когда пользователь нажимает кнопку «Назад» на UINavigationBar, текущий контроллер представления всплывает, и отображение возвращается обратно к корневому контроллеру просмотра.

Проблема в том, что я хочу, чтобы контроллеры представления ВЫГРУЖАЛИ всякий раз, когда они появляются. Похоже, они не выгружаются, потому что, когда я возвращаюсь к ним, они все еще находятся в том состоянии, в котором были, когда их вытащили.

Как мне выгрузить контроллеры просмотра после возврата к корневому контроллеру?


person RexOnRoids    schedule 31.01.2010    source источник


Ответы (3)


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

Это реализация -didReceiveMemoryWarning по умолчанию, которая вызывает -viewUnload.

Что вы, вероятно, захотите сделать, так это поместить то, что вы хотите сделать, в -viewDidDisappear на основе того, что вы описали.

person Giao    schedule 31.01.2010
comment
Хорошо, так что в -viewDidDissapear я должен поставить что-то вроде [self dealloc]? Или как насчет этого, в rootviewcontroller, помещая что-то вроде if (self.viewControllerOne! = Nil) {self.viewControllerOne = nil;} ?? - person RexOnRoids; 31.01.2010
comment
Вы не должны вызывать dealloc вручную. -dealloc обрабатывается средой выполнения. Отпустите все, что вам нужно, в -viewDidDisappear. - person Giao; 31.01.2010
comment
А как насчет предложения «ноль», которое я сказал? - person RexOnRoids; 31.01.2010
comment
Это не гарантирует, что вы сделаете то, что хотите. - person Giao; 31.01.2010
comment
Казалось, это сработало. Я просто беспокоюсь, что это может вызвать проблемы в будущем. - person RexOnRoids; 31.01.2010

Когда вы извлекаете viewcontroller из контроллера навигации, больше не должно быть ссылок на viewcontroller, и в это время необходимо освободить viewcontroller. Это должно дать вам ожидаемые результаты. Вы можете проверить, освобождается ли контроллер просмотра, добавив точку останова в методе -dealloc.

Если dealloc не вызывается, проверьте, существует ли цикл сохранения. В частности, проверьте, сохраняет ли дочерний объект контроллер представления.

person Min Tsai    schedule 08.03.2012

in -viewDidDisappear, почему бы и нет [самовыпуск]; просто нужно убедиться, что у вас есть ленивый загрузчик, чтобы он загружался обратно, когда это необходимо.

person Matt    schedule 19.03.2010
comment
Воспользуйтесь функцией поиска, чтобы найти аналогичный вопрос. Я видел точно такой же вопрос около 20 минут назад. - person SnareChops; 27.12.2012