Куча памяти растет - PullRequest
       1

Куча памяти растет

0 голосов
/ 10 февраля 2012

Сегодня я провел несколько тестов, и мне любопытно, что получилось.Я сделал приложение (ARC), которое имеет UINavigationController и два UIViewController.В первом виде есть кнопка, и когда эта кнопка нажата, загружается второй вид.Во втором виде, когда обнаружен жест дрожания, загружается первый вид и так далее.Что я заметил в инструментах, так это то, что куча увеличивается каждый раз, когда загружается представление.Вот код

AppDelegate.m

self.navigationController = [[UINavigationController alloc]init];
self.window setRootViewController:self.navigationController];
FirstViewController *firstview = [FirstViewController alloc]init];
[self.navigationController pushViewController:FirstViewController animated:YES]; 

FirstViewController.m

-(IBAction)loadSecondView
{
  SecondViewController *secondview = [SecondViewController alloc]init];
  [self.navigationController pushViewController:secondview animated:YES];
}

SecondViewController.m

-(IBAction)loadFirstView
{
  FirstViewController *firstview = [FirstViewController alloc]init];
  [self.navigationController pushViewController:first view animated:YES];
}

Я не могувыяснить, почему это происходит.Как избежать кучи роста в таком случае?

Ответы [ 2 ]

1 голос
/ 10 февраля 2012

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

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

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

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

0 голосов
/ 10 февраля 2012
SecondViewController *secondview = [[[SecondViewController alloc]init] autorelease];

FirstViewController *firstview = [[[FirstViewController alloc]init] autorelease];

Вы должны автоматически выпустить viewcontrollers (для не ARC)

если второй контроллер открывается первым, вы должны сделать popViewController. Если вы не вернетесь назад, куча будет расти

...