2013-06-14 3 views
-1

В Home ViewController на основе пользовательского выбора Мне нужно будет загрузить выбранный диспетчер просмотра. Для этого я меняю AppDelegate.window.rootViewController на навигационный контроллер, подключенный к выбранному контроллеру.set appdelegate 'window rootviewcontroller

Ex:

navigationController = [[UINavigationController alloc] initWithViewController:selectedViewController]; 
[UIApplication delegate].window.rootviewcontroller = navigationController; 

Это все работает нормально, но мой вопрос здесь: от selectedViewController я навигации к некоторым п No.of viewcontrollers и, наконец, я загрузке HomeViewController, установив AppDelegate»RootViewController.

navigationController = [[UINavigationController alloc] initWithViewController:homeViewController]; 
[UIApplication delegate].window.rootviewcontroller = navigationController; 

Будет ли это ясно, мой предыдущий навигационный стек навигации навигации? или Должен ли я внешне очистить массив? Plz помогите мне, как это сделать. Возможно, объясните мне, что произойдет, когда мы назначим навигационный контроллер appdelegate 'window rootviewcontroller?

Обратите внимание, что мое приложение 6.0.

+1

Зачем вам каждый раз перезагружать rootviewcontroller? – Adithya

+0

Ну его существующий код, который я не должен менять. Возможно, некоторые цели, но здесь я должен убедиться, что навигационный стек пуст, когда я меняю rootviewcontroller. – Srivathsa

ответ

1

Навигационный блок поддерживается навигационным контроллером. Поэтому, если вы создаете новый контроллер навигации, его стек явно пуст. Свойство RootViewController определяет, кто является главным viewController в текущем окне приложения. Таким образом, замена rootviewcontroller отображает новый контроллер как основной для этого окна.

1

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

В вашем случае я настоятельно рекомендую вам рассказать о своем приложении. Используйте XCode instruments как Распределение/Утечки. Проверьте наличие экземпляров контроллера контроллера/диспетчера навигации, освобождается ли память, когда это предполагается или нет. Если происходит утечка памяти, выясните, где в коде сохраняются контроллеры.

Вот хороший учебник от Raywenderlich's site о том, как найти утечки памяти в коде.