2010-11-25 54 views
0

我有它加载时的附件按钮被点击视图一个UITableView:如何卸载一个子视图?

MyView *newView = [[MyView alloc] ...]; 
[self.navigationController pushViewController:newView]; 

认为,当用户执行某种动作里面,我做这个返回到的UITableView:

[self.navigationController popViewControllerAnimated:YES]; 

这可以工作,但下次通过点击附件按钮访问视图时,它会保留第一次使用视图时所包含的某些值。

会有如此,它是新鲜的下一次显示实际上是“完全卸载”的观点正确的方法是什么?

回答

1

你应该autorelease的NewView的(我假设是实际上是一个视图控制器,因为你将它推送到导航堆栈)。

因为它目前为您的视图控制器是永远不会被释放,并正在泄漏:

  • 它被分配(保留计数1)
  • 推入保留了视图控制器的导航堆栈(保留计数2)
  • 它然后从堆,释放它弹出(保留计数1)
  • 它从未该
后再次释放

至于为什么你得到以前的值,还必须力推相同的实例,而不是每次你把它推到堆栈时创建一个新的 - 我不能告诉你,因为还没有公布所有相关的码。

0

你需要释放任何保留在viewDidUnload主视图的子视图...

例如,如果您已经通过声明为在IB网点,释放他们的dealloc之前,将其设置为无保留的UI元素。

下面是一个例子:

@interface ...

{ 
    IBOutlet UIButton *button; 
    IBOutlet UITextLabel *label; 
    IBOutlet UITableView *tableview; 
} 

@property (nonatomic, retain) UIButton *button; 
... 

那么你应该将这些设置为零的viewDidUnload

- (void)viewDidUnload { 
    self.button = nil; 
    self.textlabel = nil; 
    self.tableview = nil; 
    ... 
}