我正在使用UIviewcontroller子类。在我的主视图中,我有3个按钮,每个按钮将加载一个不同的笔尖。每个新笔尖都有一个后退按钮返回主视图。 当我点击一个任何视图的后退按钮移动到主视图时,该视图的dealloc没有被调用?我不明白这一点。 任何人都可以解释什么时候会调用那些dealloc?
答案 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 ...最终会导致内存警告并且我的数据丢失。这涉及重复“重用”子控制器。
如果你能指出我的深入文本进入导航控制器和子视图内存管理,那将是非常好的。