无法释放视图控制器

时间:2011-08-09 03:22:32

标签: objective-c ios cocoa-touch uiviewcontroller

我的应用是一款问题游戏。我有一个名为Question_1的视图控制器;这是唯一一个加载每个问题的视图控制器。我在另一个名为HowToPlay的类中设置了一个数组。这个数组加载了一个字符串,一个代表每个问题。在viewDidLoad的{​​{1}}方法中,它随机选择一个问题,然后更改问题的文本。在用户按下下一个按钮后,它会自动重新加载,直到它意识到数组中没有任何内容可以加载,然后它通过控制器加载游戏。

以下是我正在加载我的nib文件以重新加载问题:

Question_1

我遇到的问题是,每次重新加载此视图时,它都不会释放旧视图,并且会继续构建内存。这就像每个视图控制器不断加载到另一个视图控制器之上。我需要它来释放旧的视图控制器。我尝试过这样的事情:

[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;

它仍然不会从内存中释放旧视图。

1 个答案:

答案 0 :(得分:1)

如果您要反复显示此视图控制器,则没有理由将其丢弃并再次加载。只需按住它,然后为每个问题重新配置它。

但是在回答你的问题时,你需要一些“喜欢”的东西

[self.parentViewController dismissModalViewControllerAnimated:NO];

但是如果您没有使用导航控制器或标签栏控制器,则不会设置parentViewController。您需要自己设置(可能并不总是安全;我从不这样做),或设置另一个变量来跟踪您的父(我通常使用委托)。然后你会这样做:

[self.delegate dismissModalViewControllerAnimated:NO];