0

快速提问,希望我只是缺少一些简单的东西。好的,我有一个类拥有指向另一个的指针;MainMenuClass 和 NormalGameClass。在 MainMenuClass 内部,我执行以下操作。

 m_NormalGame = [[NormalGameMode alloc] initWithNibName:@"NormalGameMode" bundle:[NSBundle mainBundle]];
 m_NormalGame.delegate = self;
 [self presentModalViewController:m_NormalGame animated:YES];

现在,每当没有调用 NormalGameClass 的 dealloc 函数时,我首先注意到一个问题,因此我进行了一些 retainCount 调用,并且由于某种原因,一旦它返回 MainMenu 中的释放函数,它的保留计数为 6。进一步挖掘让我很困惑。NormalGameClass 中 viewDidLoad 之后的第一行,它的 [self retainCount] 是 4。有人知道这里会发生什么吗?我只在 NormalGameClass 上调用过一次 alloc,但它被保留到 6 个?奇怪的是,从来没有过去。感谢您的任何见解。

更新:正在摆弄东西,发现这很尴尬。在 MainMenuClass 中,这是我摆脱 NormalGame 的方法。

[self dismissModalViewControllerAnimated:NO];
m_NormalGame.delegate = nil;
[m_NormalGame release];

现在,通过这个设置,NormalGame 的 dealloc 永远不会被调用。但是,如果我在上面发布的那个之后立即调用 [m_NormalGame release],它会调用 NormalGame 的 dealloc ...两次。=/把我画得一头雾水。

4

2 回答 2

0

我想 -dismissModalViewControllerAnimated: 调用不会释放视图控制器,直到解雇完成。您确实需要平衡控制器的初始 -alloc/-init 与 -release,但不应期望立即调用 -dealloc 方法。如果对象是自动释放的,它实际上可能会在运行循环的下一次迭代期间被调用。

你是说如果没有两次调用来释放你的 dealloc 就不会被调用,或者它只是没有立即被调用?

此外,尽量不要检查保留计数,因为这只会导致混乱和头痛。只需正确遵循内存管理规则即可。

于 2010-08-27T21:41:17.590 回答
0

presentModalViewController 保留了传递的视图控制器,所以如果不自动释放传递的视图控制器,则需要释放它。在这种情况下,您需要释放 m_NormalGame。

m_NormalGame = [[NormalGameMode alloc] initWithNibName:@"NormalGameMode" bundle:[NSBundle mainBundle]];
m_NormalGame.delegate = self;
[self presentModalViewController:m_NormalGame animated:YES];
**[m_NormalGame release];**
于 2010-08-28T00:42:42.297 回答