NavigationController initWithRootViewController dealloc - PullRequest
2 голосов
/ 17 марта 2011

У меня есть довольно простой код, где я использую UINavigationController и добавляю rootViewController. После некоторой обработки я хочу отключить текущий контроллер представления и заменить его другим. Кажется, это работает нормально, но мой оригинальный контроллер представления не освобождает. Я установил точку останова в ее заменителе, и он никогда не попадал в цель. Ниже мой код. Не уверен, почему так происходит. Просто для тестирования, если я дважды выпущу startController, он исчезнет.

StartViewController *startController = [[StartViewController alloc] initWithNibName:@"StartViewController" bundle:[NSBundle mainBundle]]; 

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:startController];
    [nav pushViewController:startController animated:NO];

    self.navController = nav;

    [startController release];
    [nav release];

Спасибо за любую помощь.

Ответы [ 3 ]

1 голос
/ 17 марта 2011

Ваша конечная цель состоит в том, чтобы довести счетчик удержания контроллера представления до нуля.Поэтому убедитесь, что все, что сохраняет представление, освобождается и в любом месте, где оно сохраняется, также освобождается.

Пожалуйста, проверьте следующие возможные причины:

  1. Убедитесь, что вы извлекаете контроллер представления из navController, если у вас есть пользовательская кнопка возврата.Кнопка Назад по умолчанию будет работать нормально.

  2. Убедитесь, что все ваши IBOutlets установлены в ноль в viewDidUnload

    - (void)viewDidUnload 
    {
       [super viewDidUnload];
       self.webView = nil;
    }
    
  3. Если вы просматриваетеявляется наблюдателем в модельном классе для получения событий

Например

model.addObserver(myView);

и, конечно, также делает

model.removeObserver(myView);

Я надеюсь, что этопомогает.

0 голосов
/ 18 марта 2011

Я пытался отключиться от корневого контроллера представления. Вместо этого я использовал сообщение setViewControllers от объекта UINavigationController, чтобы заменить все мои контроллеры представления.

0 голосов
/ 18 марта 2011

Похоже, что ваш self.navController получил удерживающую ссылку на него. возможно поставить

self.navController =nil; 

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

...