我有一个UITableView,可以在点击附件按钮时加载视图:
MyView *newView = [[MyView alloc] ...];
[self.navigationController pushViewController:newView];
在视图中,当用户执行某个操作时,我会通过执行以下操作返回到UITableView:
[self.navigationController popViewControllerAnimated:YES];
这样可以,但是下次通过点击附件按钮访问视图时,它会保留第一次使用视图时包含的一些值。
有没有一种方法可以实际“完全卸载”视图,以便下次显示时它是新鲜的?
答案 0 :(得分:1)
您应该autorelease
newView(我假设它实际上是一个视图控制器,因为您将其推送到导航堆栈)。
目前看来,您的视图控制器永远不会被释放并且正在泄露:
至于为什么你得到以前的值,你也必须推动相同的实例,而不是每次将它推到堆栈时创建一个新实例 - 我无法分辨,因为你还没有发布所有的相关代码。
答案 1 :(得分:0)
您需要在viewDidUnload ...
上发布主视图的所有保留子视图例如,如果您通过在IB中将它们声明为出口来保留UI元素,则在将它们释放到dealloc之前将它们设置为nil。
以下是一个例子:
@interface ...
{
IBOutlet UIButton *button;
IBOutlet UITextLabel *label;
IBOutlet UITableView *tableview;
}
@property (nonatomic, retain) UIButton *button;
...
然后你应该在viewDidUnload
上将它们设置为nil- (void)viewDidUnload {
self.button = nil;
self.textlabel = nil;
self.tableview = nil;
...
}