2011-01-28 5 views
1

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

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

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

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

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

ответ

1

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

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

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

+0

Большое спасибо. Теперь мне это понятно :) – Samui

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