dealloc非常奇怪的行为 - 没有被调用

时间:2012-02-24 13:49:54

标签: iphone uiviewcontroller delegates dealloc

我已经测试了我的所有viewControllers dealloc方法。所有这些都在调用popViewControllerAnimated时被正确调用。

但是只有1个控制器的dealloc方法没有被调用。我无法弄清楚这个问题。

在推送到该控制器时,我已正确编写以下代码:

AController *contr = [AController alloc]initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:contr animated:YES];
[contr release];

当我从控制器回来时,我写道:

[self.navigationController popViewControllerAnimated:YES];

这是非常奇怪的行为,因为这段代码写在许多控制器上并且工作正常。

6 个答案:

答案 0 :(得分:19)

如果它没有被调用它仍然活着。尝试使用仪器来找到它。如果您在工具中使用分配工具,您应该能够在分配列表中找到类(按名称)并查看它是否仍然存在。你甚至可以看到由谁保留(我假装课程是人),这是保留的。

答案 1 :(得分:7)

如果未调用dealloc,则可能有另一个对象保留它。

检查可能使用此委托的对象是否保留它。

答案 2 :(得分:2)

嗨,我知道这是一个老帖子,但这个答案可能会帮助某些人坚持我的立场。花了很长时间试图找出为什么dealloc没有被调用。事实证明,我没有在viewWillDisappear方法中使NSTimer无效,因此它保留了保留计数。

在这种情况下,这篇精彩的博文是人们必读的内容:

http://www.reigndesign.com/blog/debugging-retain-cycles-in-objective-c-four-likely-culprits/#comment-41302

答案 3 :(得分:1)

我遇到了类似的问题;我希望在3秒内显示UIViewController(版权屏幕)。所以我本质上是从主文件中调用PushViewCOntrollerpopViewController,当我弹出视图控制器时,dealloc没有被调用。

然后我从pushViewCOntroller切换到

[self.navigationController presentModalViewController:copyrightView animated:NO];

[self.navigationController dismissModalViewControllerAnimated:NO];

它开始工作了。

我不知道如何解决这个问题;但确实如此。

答案 4 :(得分:0)

对我来说,在分配viewcontroller工作时使用autorelease希望这有助于某人

[[AController alloc]initWithNibName:nil bundle:nil]autorelease];

答案 5 :(得分:0)

在我的情况下,我已经指定了具有强引用的圆形引用对象类型。改为弱类修复了这个问题。 尝试使用仪器在内存中保留哪个对象,如其他答案中所述。