UITabBarController освобождает представления после предупреждения памяти - PullRequest
2 голосов
/ 18 ноября 2010

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

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

После нескольких минут использования моего приложения (вплоть до стадии элемента, где используется прокрутка из 4 320x460 изображений), я получаю ..

Received memory warning. Level=1

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

При использовании изображений я пытаюсь использовать ..

UIImageView *imageView = [[[UIImageView alloc] init] autorelease];
[imageView setImage:[UIImage imageNamed:@"image"]];
[self.view addSubview:imageView];

.. asнасколько это возможно, насколько мне известно, это «управляемая память», и она должна корректно устраняться.

Проблема с памятью, которую я считаю, вызвана просто тем, что 4 большие изображения загружаются в память, этотребование моего приложения.Исчезновение вкладки - это не: /

Есть идеи / рекомендации?

Ответы [ 2 ]

3 голосов
/ 18 ноября 2010

Это по замыслу.Когда ваше приложение получает предупреждение о памяти, все контроллеры представлений, которые в данный момент не видны, будут выгружать свои представления.Вы должны быть готовы к этому.Когда пользователь повторно открывает вкладку, которая была выгружена, контроллер представления перезагружает представление и снова вызывает -viewDidLoad, где вы должны выполнить настройку представления.

1 голос
/ 01 декабря 2010

Оле дал достойное объяснение. Однако, если вы не загружаете представление контроллера за пределами экрана, вы должны установить его снова в -loadView. Этот метод вызывается для настройки иерархии вашего представления, затем вызывается -viewDidLoad, чтобы указать, что представление готово. Если вы реализуете его в -viewDidLoad, у вас будет загружено пустое представление (UIViewController -loadView), а затем заменено (вашим кодом -viewDidLoad), что вызовет мерцание.

Еще более подробное объяснение загрузки ваших просмотров доступно здесь: http://myok12.wordpress.com/2010/11/30/custom-uiviewcontrollers-their-views-and-their-memory-management/

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