2010-11-25 72 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; 
    ... 
}