如何知道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方法,但它会更复杂。我希望这个答案会有帮助。如果你会发现你的情况“更复杂”,请发表评论,然后我会尝试解释更多细节。
答
我也想深入了解内存管理细节(低于表面级别),以了解控制器在堆栈上下的情况。我从Mark和LaMarche的文章“开始iPhone 3开发”中构建了我的框架,但是该文本有效地重用了子控制器,并且它们的dealloc方法从未被调用。
我注意到,重复使用包含UIWebView的NIB的子控制器调用Google的Web方向url ...最终导致内存警告,并且我的数据丢失。这涉及重复“重复使用”子控制器。
如果您可以指向我深入的文本,进入导航控制器和子视图内存管理,这将是非常好的。
谢谢..我们fotgot添加[控制器发布],现在dealloc被调用。 – CKT 2010-05-10 05:06:41
你能写出更复杂的部分吗? :d – 2012-08-09 14:05:34