ViewController не выпускается - PullRequest
       5

ViewController не выпускается

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

Каждый раз, когда я переворачиваю страницу в своем приложении, я удаляю и выпускаю предыдущий viewController - но по какой-то причине он все еще находится в памяти. Я знаю это, потому что после некоторого использования приложения я получаю 47 предупреждений о памяти - по одному от каждого контроллера представления - если я открыл 47 страниц до того, как появилось предупреждение о памяти. Я получаю 60 предупреждений о памяти, если открыл 60 страниц до того, как появилось предупреждение о памяти. И так далее ...

Это код, который работает от страницы к странице:

UIViewController *nextController;
Class nextClass = [pageClasses objectAtIndex:(currentPageIndex - 1)];
nextController = [[nextClass alloc] initWithNibName:[pageNibs objectAtIndex:(currentPageIndex - 1)] bundle:nil];
[nextController performSelector:@selector(setDelegate:) withObject:self];

[currentPageController.view removeFromSuperview];
[self.view addSubview:nextController.view];

[currentPageController release];
currentPageController = nextController;
[currentPageController retain];
[nextController release];

Кто-нибудь может указать на любые проблемы, которые они видят?

Большое спасибо!

Ответы [ 3 ]

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

Кроме этого, убедитесь, что вы также nil любые выходы, которые ваш viewController имеет в viewDidUnload и, как правило, делаете все наоборот для любого соответствующего кода в viewDidLoad. Я вижу много кода iOS, который этого не делает, и он останавливает среду выполнения, должным образом выгружая контроллеры представлений и связанные представления.

0 голосов
/ 31 декабря 2010

Я полагаю, это потому, что вы звоните retain на currentPageController. Я только недавно задал аналогичный вопрос и получил массу разъяснений по управлению памятью.

РЕДАКТИРОВАТЬ: Что делать, если вы сделали что-то вроде:

[currentPageController.view removeFromSuperview];
[currentPageController release];

Class nextClass = [pageClasses objectAtIndex:(currentPageIndex - 1)];
currentPageController = [[nextClass alloc] initWithNibName:[pageNibs objectAtIndex:(currentPageIndex - 1)] bundle:nil];
[currentPageController performSelector:@selector(setDelegate:) withObject:self];

[self.view addSubview:currentPageController.view];

Он немного очищает код и не пропускает память.

0 голосов
/ 31 декабря 2010

Играли ли вы с разделами «Поведение» и «Память» на панели «Атрибуты окна» в Инспекторе IB? Здесь вы обычно контролируете использование памяти и выпускаете вещи (за пределами самого кода). Попробуйте изменить значения для рассматриваемого объекта представления, а также для окна (или любого другого значения для iPhone).

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