2011-02-01 3 views
1

Я вижу неожиданное поведение, когда я запускаю симулированное предупреждение о памяти, и я надеюсь, что кто-то сможет объяснить.iOS Имитировать проблемы с памятью памяти

Мое приложение содержит UITabBarController и UINavigationController. Весь мой пользовательский интерфейс создается программно, ничто не загружается из NIB. В моей функции делегирования applicationDidFinishLaunching я создаю контроллер табуляции, контроллер навигации и пять контроллеров представления. Когда я вызываю предупреждение о памяти, основной вид становится полностью белым, оставляя навигатор сверху и вкладкой внизу. Когда я меняю вкладки, новая вкладка правильно загружает его данные, поскольку loadView правильно вызывается, однако навигационный контроллер исчезает.

Это меня смущает по двум причинам. 1) Почему главный вид выгружается? Я не думал, что viewDidUnload будет вызываться на активных контроллерах. 2) Почему мой навигационный контроллер исчезает, но только после изменения вкладок. Это настоящая загадка.

Спасибо.

ответ

1

вопрос сводился к тому, как я использовал UIViewControllers, UIViews, и в UINavigationController я имел 5, которые динамически меняли местами между ~ 3 просмотрами каждый. Это было немного странно, и по продукту это был мой первый проект iOS и не понимал «Apple Way».

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

Извлеченный урок.

1

Это звучит как проблема с памятью. Возможно, вам понадобится retain объекты, которые вы создаете для UITabBarController и UINavigationController. В методе выгрузки вам необходимо освободить их.

Существует отличное руководство от Apple, объясняя, управление памятью в Objective C:... "Memory Management Programming Guide»Очень ясно и полезно

+1

Это может помочь, если вы разместили код. Как вы создаете свои контроллеры, как объявляются свойства? – Axel

+0

Я не думаю, что это проблема сохранения. Если бы это было так, то это немедленно сработало бы. Моя единственная проблема заключается в том, что когда я выбираю «имитировать предупреждение о памяти», ОС заставляет просмотр dealloc, когда он активен. – LordCecil

+0

(Хит ввод рано, упс) Я не думаю, что это проблема сохранения. Если бы это было так, то это немедленно сработало бы. Моя единственная проблема заключается в том, что когда я выбираю «имитировать предупреждение о памяти», ОС заставляет просмотр dealloc, когда он активен. Проводка кода сложна, потому что это сложно. Мой делегат приложения создает UITabBarController, UINavigationController и 5 настраиваемых контроллеров представлений. Когда я «имитирую предупреждение о памяти», выходят представления всех 5 контроллеров представлений, хотя в настоящее время используется один из них! – LordCecil

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