iPhone - 保留计数 - 保留计数上升没有明显的原因

时间:2010-08-27 21:00:32

标签: iphone retain retaincount

快速提问,希望我错过了一些简单的事情。好吧,我有一个类,它拥有指向另一个的指针; 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中的release函数,它的保留计数为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 ...两次。 = /让我困惑。

2 个答案:

答案 0 :(得分:0)

我认为-dismissModalViewControllerAnimated:call在解除完成之前不会释放视图控制器。你需要平衡控制器的初始-alloc / -init和-release,但你不应该期望立即调用-dealloc方法。事实上,如果对象是自动释放的,它可能会在运行循环的下一次迭代期间被调用。

你是说没有两个调用来释放你的dealloc没被调用,或者它是不是立即被调用?

另外,尽量不要检查保留计数,因为这只会导致混乱和头痛。只需正确关注memory management rules

答案 1 :(得分: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];**