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

时间:2009-12-14 10:56:14

标签: iphone iphone-sdk-3.0

我正在使用UIviewcontroller子类。在我的主视图中,我有3个按钮,每个按钮将加载一个不同的笔尖。每个新笔尖都有一个后退按钮返回主视图。 当我点击一个任何视图的后退按钮移动到主视图时,该视图的dealloc没有被调用?我不明白这一点。 任何人都可以解释什么时候会调用那些dealloc?

2 个答案:

答案 0 :(得分:2)

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

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

你应该添加

[controller release];

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

答案 1 :(得分:0)

我也想更深入地了解内存管理细节(低于表面级别),其中控制器被推入和关闭堆栈。我从Mark和LaMarche的文章“Beginning iPhone 3 Development”中构建了我的框架,但该文本有效地重用了子控制器,并且它们的dealloc方法永远不会被调用。

我注意到重复使用带有NIB的子控制器,其中包含调用Google的网络指示网址的UIWebView ...最终会导致内存警告并且我的数据丢失。这涉及重复“重用”子控制器。

如果你能指出我的深入文本进入导航控制器和子视图内存管理,那将是非常好的。