Потребление памяти продолжает расти при запуске приложения - PullRequest
0 голосов
/ 14 июля 2009

У меня есть несколько представлений в моем приложении с соответствующими контроллерами представления. То, что я делаю, заключается в следующем.

Вот более наглядный код:

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
  View1Controller *viewController1 = [[View1Controller alloc] initWithnibName:@"View1"];
  View2Controller *viewController2 = [[View2Controller alloc] initWithnibName:@"View2"];
  View3Controller *viewController3 = [[View3Controller alloc] initWithnibName:@"View3"];

  [window addSubview:viewController1.view];
  [window makeKeyAndVisible];
}

В файле View1Controller:

Для некоторых действий кнопки

- (IBAction) goTOView2:(id)sender
{
  iPhoneApplicationAppDelegate *appDelegate = (iPhoneApplicationAppDelegate*) [[UIApplication sharedApplication] delegate];
  [appDelegate.window.superView removeFromSuperview];
  [appDelgate.window addSubview: appDelgate.viewController2.view];
}

Аналогично для view3

Я сохраняю все эти три контроллера вида в моем делегате приложения. Когда я хочу переключиться на другое представление, у меня есть следующий код.

Не используйте синтаксические ошибки кода.

Этот контроллер с тремя представлениями имеет несколько представлений с собственным навигационным контроллером, который позволяет нажимать и выдвигать разные виды.

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

Пожалуйста, помогите и спасибо за это заранее.

Ответы [ 3 ]

0 голосов
/ 15 июля 2009

Инструмент «утечки» обычно не помогает в тех случаях, когда вы видите, как медленно растет память, это часто не утечки, а объекты, которые неожиданно сохраняются.

В инструменте «Выделение объектов» выберите параметр «создан и еще жив».

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

Кроме того, вы говорите, что устанавливаете эти контроллеры вида как свойства. Это означает, что вы устанавливаете их именно так в applicationDidFinishLaunching:

self.viewController1 = viewController1;

правый

0 голосов
/ 15 июля 2009

Эта строка выглядит неправильно:

[appDelegate.window.superView removeFromSuperview];

То, что вы хотите, это что-то вроде:

[viewController1.view removeFromSuperview];

в зависимости от того, с какого вида вы удаляетесь.

0 голосов
/ 14 июля 2009

Добавление и удаление представлений из окна вашего приложения не является рекомендуемым способом переключения между контроллерами представления. Вы должны использовать UITabBar и позволить UITabBarController управлять вашими контроллерами представления.

Тот факт, что потребление памяти продолжает расти, означает, что вы выделяете больше объектов в ходе работы приложения. Вероятно, это не имеет никакого отношения к тому, как вы переключаете представления. Скорее всего, вы выделяете объекты и забываете их освободить, что приводит к утечкам памяти. Вам следует попробовать использовать инструмент «Утечки» в инструментах, чтобы определить, какие строки кода вызывают ваши проблемы. (Или отправьте больше здесь!)

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