如何知道dealloc是否在iphone sdk中被调用?

问题描述:

我正在使用UIviewcontroller子类。在我的主视图中,我有3个按钮,每个按钮都会加载一个不同的笔尖。并且每个新笔尖都有一个后退按钮可以回到主视图。 当我点击任何视图的后退按钮以移动到主视图时,该视图的dealloc没有被调用?我不明白这一点。 任何人都可以解释何时这些意见dealloc将被称为?如何知道dealloc是否在iphone sdk中被调用?

如果dealloc方法没有被调用,这意味着你用手保留了你的viewController对象。例如,在这种情况下的dealloc不会被点击后退按钮后调用返回

MyViewController *controller = [[MyViewController alloc] init]; 
[self.navigationController pushViewController:controller animated:YES]; 

您应该添加

[controller release]; 

这个代码,以确保您的viewController的实例将被释放。如果您完全确定,您发送了相同数量的alloc(或任何增加对象的retainCount的消息)和release消息,并且不会调用dealloc方法,但它会更复杂。我希望这个答案会有帮助。如果你会发现你的情况“更复杂”,请发表评论,然后我会尝试解释更多细节。

+0

谢谢..我们fotgot添加[控制器发布],现在dealloc被调用。 – CKT 2010-05-10 05:06:41

+0

你能写出更复杂的部分吗? :d – 2012-08-09 14:05:34

我也想深入了解内存管理细节(低于表面级别),以了解控制器在堆栈上下的情况。我从Mark和LaMarche的文章“开始iPhone 3开发”中构建了我的框架,但是该文本有效地重用了子控制器,并且它们的dealloc方法从未被调用。

我注意到,重复使用包含UIWebView的NIB的子控制器调用Google的Web方向url ...最终导致内存警告,并且我的数据丢失。这涉及重复“重复使用”子控制器。

如果您可以指向我深入的文本,进入导航控制器和子视图内存管理,这将是非常好的。