Проблемы с освобождением контроллера вида - PullRequest
1 голос
/ 09 августа 2011

Мое приложение - игра-вопрос.У меня есть контроллер вида с именем Question_1;это единственный вид контроллера, который загружается каждый вопрос.У меня есть массив в другом классе под названием HowToPlay.Этот массив загружен строками, по одной на каждый вопрос.В viewDidLoad методе Question_1 он случайным образом выбирает вопрос, а затем изменяет текст вопроса.После того, как пользователь нажимает следующую кнопку, он перезагружается, пока не поймет, что в массиве не осталось ничего для загрузки, а затем загрузит игру поверх контроллера.

Вот как я загружаю свой nib-файл для перезагрузкивопрос:

[background release];
[menu release];
[changeOnWrong release];
[callPauseLabels release];
[youArePaused release];
[only1Pause release];
[resume release];
[afterPause release];
[pause release];
[timerString release];
[timerLabel release];
[trueButton release];
[falseButton release];
[continueButton release];
[showYesNo release];
[scoreAmmount release];


callPauseLabels = nil;
afterPause = nil;
countDown = nil;
Question_1 *Q1 = [[Question_1 alloc] initWithNibName:@"Question 1" bundle:nil];

Q1.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:Q1 animated:YES];

[Q1 release];
Q1 = nil;

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

[self dismissModalViewControllerAnimated:NO];
[self.parentViewController dismissModalViewControllerAnimated:NO];

Это все еще не освобождает старый вид из памяти.

1 Ответ

1 голос
/ 09 августа 2011

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

Но в ответ на ваш вопрос вам понадобится что-то «подобное»

[self.parentViewController dismissModalViewControllerAnimated:NO];

Но если вы не используете контроллер навигации или контроллер панели вкладок, parentViewController не будет установлен. Вам нужно будет установить его самостоятельно (это не всегда безопасно; я никогда так не делаю) или установить другую переменную для отслеживания вашего родителя (я обычно использую делегат). Тогда вы бы сделали это:

[self.delegate dismissModalViewControllerAnimated:NO];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...