Стек NavigationController - PullRequest
       6

Стек NavigationController

1 голос
/ 28 января 2011

Прежде всего, извините за мой плохой английский. Я постараюсь объяснить мой вопрос:

У меня есть RootViewController (проект на основе навигации). Таким образом, он показывает представление таблицы, и когда пользователь выбирает строку таблицы (didSelectRowAtIndexPath), y делает следующее, чтобы показать следующее представление:

NextViewController *nextView = [[NextViewController alloc] initWithNibName:@"NextViewController" bundle:nil];
[self.navigationController pushViewController:nextView animated:YES];
[nextView release];

Что произойдет, если пользователь выберет кнопку «Назад» на панели навигации и снова выберет строку, и будет делать это несколько раз? Создается много новых представлений (экземпляров NextViewController) (много выделяется памяти)? Или он просто перемещается по стеку?

Вы можете мне помочь? Я не хочу тратить память таким образом (если это так). Спасибо!

1 Ответ

1 голос
/ 28 января 2011

Если пользователь несколько раз переключается с вашего RootViewController на NextViewController, вот что происходит:

  1. NextViewController создан (alloc 'd) в вашем didSelectRowAtIndexPath: методе. Поскольку вы вызвали метод init, вы ответственны за его освобождение.
  2. Вы помещаете nextView в стек контроллера навигации, который сохраняет его.
  3. Вы отпускаете nextView, поэтому единственное, что у него есть, - это навигационный контроллер.
  4. Как только ваш пользователь отходит от NextViewController, контроллер навигации освобождает его. Теперь ничего не сохраняется nextView, поэтому он получает dealloc 'd. Память освобождена.

По сути, вы создаете NextViewController каждый раз, когда ваш пользователь перемещается взад-вперед (вы не «просто перемещаетесь по стеку», поскольку объекты меняются каждый раз), но вы не пропускаете большой объем памяти или удержание каждого контроллера, который вы создаете. Ваше использование памяти здесь в порядке.

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