我已经测试了我的所有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];
这是非常奇怪的行为,因为这段代码写在许多控制器上并且工作正常。
答案 0 :(得分:19)
如果它没有被调用它仍然活着。尝试使用仪器来找到它。如果您在工具中使用分配工具,您应该能够在分配列表中找到类(按名称)并查看它是否仍然存在。你甚至可以看到由谁保留(我假装课程是人),这是保留的。
答案 1 :(得分:7)
如果未调用dealloc,则可能有另一个对象保留它。
检查可能使用此委托的对象是否保留它。
答案 2 :(得分:2)
嗨,我知道这是一个老帖子,但这个答案可能会帮助某些人坚持我的立场。花了很长时间试图找出为什么dealloc没有被调用。事实证明,我没有在viewWillDisappear方法中使NSTimer无效,因此它保留了保留计数。
在这种情况下,这篇精彩的博文是人们必读的内容:
答案 3 :(得分:1)
我遇到了类似的问题;我希望在3秒内显示UIViewController
(版权屏幕)。所以我本质上是从主文件中调用PushViewCOntroller
和popViewController
,当我弹出视图控制器时,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)
在我的情况下,我已经指定了具有强引用的圆形引用对象类型。改为弱类修复了这个问题。 尝试使用仪器在内存中保留哪个对象,如其他答案中所述。