2012-04-14 55 views
1

我需要釋放我的navigationViewController上的mainViewController的視圖,以避免我收到的內存警告。UIViewController視圖 - > loadView vs viewWillAppear

加載視圖的好習慣是在'loadview'方法中,但是當我嘗試釋放視圖(當我轉到堆棧的下一個控制器時)執行「self.view = nil」時,它再次調用'loadview'方法,所以沒有任何反應。

我解決了這個問題加載視圖中的「viewWillAppear中」的方法,但是,我的問題是:

是該程序是否正確? 如果不是(這就是我的想法)我如何釋放該視圖以釋放其內存?

哪種方法可以做到最好(或更正確)?

這是代碼:

'的loadView' 沒有加載視圖

- (void)loadView 
{ 
    [super loadView]; 
    (some more code) 
} 

正是在這裏裝

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    if (!pral) 
    { 
     pral = [[TouchDrawView alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
      [self setView:pral]; 
      [pral release]; 
    } 
     (some more code) 
} 

這是調用的下一個的viewController視圖堆棧

- (void)menus:(id)sender 
{ 
    opcions *ops = [[opcions alloc] init]; 
    [[self navigationController] pushViewController:ops animated:YES]; 
    [ops release]; 

//Here I'm trying to free memory releasing the view 
    [pral removeFromSuperview]; 
    pral = nil; 
    self.view = nil; 
} 

謝謝

回答

0

構建自定義子視圖的更好的鉤子是viewDidLoad。

最小的情況下,您應該釋放didReceiveMemoryWarning和dealloc中的保留子視圖(pre-ARC)。

當您推送到新的viewController時不需要釋放。你的舊的還在那裏,在下面。

+0

是的,我的老人在那裏,但是沒有必要爲了消耗內存資源而放在那裏,不是嗎? (它不在屏幕上)。所以,如果我理解得很好,在收到內存警告時不做任何事情和「反應」是一種很好的做法嗎? – Kanick 2012-04-14 17:04:55

+0

接收到內存警告(會觸發viewDidUnload)是可以的,因爲直到你收到警告,你沒有內存問題,所以沒有必要處理東西。如果您在不需要時處理某些內容,則可能會產生其他問題,例如需要重新載入所有內容(=延遲)或更糟糕的情況,從而丟失難以重新載入的信息(可能來自其父VC) 。 – SomaMan 2012-04-14 17:45:39

+0

@SomaMan,是的,這是有道理的。感謝所有這些快速回復。 – Kanick 2012-04-14 18:09:21

0

你不必卸載視圖,因爲它自動卸載。你只需要在ViewdidUnload方法中釋放那些包含內存的對象。

+0

是的,但我認爲ViewDidUnload不會被調用(在簡單的naviagationController應用程序中),除非視圖由於內存警告而被卸載。我試圖避免這種情況。 – Kanick 2012-04-14 16:59:24

相關問題