2012-10-26 164 views
3

我正在使用ARC + Storyboard。解散呈現的視圖控制器

我不使用塞格斯,或一個UINavigationController,而是呈現每個單獨的視圖:

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
SecondViewController *secondViewController = [storyBoard instantiateViewControllerWithIdentifier:@"SecondVC"]; 

[self presentViewController:secondViewController animated:YES completion:nil]; 

所以,我的應用程序的典型流程是:

MainViewController presentViewController: SecondViewController presentViewController: ThirdViewController ...等

繼續前進之後,我不希望我提交的前一個視圖控制器再一次在內存中閒逛。

現在,在我轉到第二個視圖控制器之後,我可以在MainViewController中的一個定時器函數中放置一個斷點,並確認所有東西仍然存在。

回答

0

注意:視圖 - 控制是automatically retainedpresentViewController:,但在ARC它會處理保留的對象,並在適當的時候將其釋放。

調用dismissModalViewController稍後將release the retained controller automatically

0

難道只是我,也許我的閱讀不正確?看起來對於呈現和呈現的視圖控制器存在誤解?

如果你的MainViewController在最前面,然後你打電話: [mainViewController presentViewController:secondVC animated:YES completion:nil];那麼secondVC就會成爲呈現的控制器,並且mainViewController將成爲它的presentsViewController。


這就是說,它看起來像你希望你的呈現視圖控制器從內存中卸載?

「現在,在我進入我的第二個視圖控制器之後,我可以在MainViewController中的一個定時器函數中放置一個斷點,並確認一切仍然存在。

如果是這樣,這並不是視圖控制器以這種方式表現的方式。 presentingViewController將在內存中,直到它收到內存警告通知,然後它將只卸載其視圖,如果它不在頂部。 (控制器對象本身仍然活着)。

簡單地釋放呈現控制器不是一個好主意,因爲它會破壞控制器之間的父子關係。您可以手動修復此問題,但在某些情況下可能會有點麻煩。剛推薦,如果你知道你在做什麼。

如果你想真的殺死presentsViewController可能是更好的create an extra custom container view controller所以它呈現視圖控制器和釋放前者。視圖控制器並不昂貴,它的視圖是它是什麼:)

注意即使您使用導航控制器有關加載/卸載其視圖的行爲將類似。只有視圖被卸載,因爲導航控制器保留了其所有視圖控制器。

+0

是的,我認爲你正確理解了我。我也完全理解呈現視圖控制器和呈現視圖控制器。我只是在尋找一種方法來實際銷燬呈現視圖控制器。我的應用程序基於計時器執行動畫,並將多個大數據圖像加載到內存中。一旦我改變了看法,我不希望這些操作在幕後被解僱。 –

+0

作爲一種解決方法,我只是在我提出一個新的VC後阻止我的計時器功能被調用,但我仍對每個屏幕上加載的大圖像感到緊張。我不希望對業績產生負面影響。 –

+0

你可以做的是在將其他視圖控制器放在頂部並手動重新加載後手動卸載所有大圖像。 – nacho4d

0

可能會有所幫助。

[viewController.view removeFromSuperview];

我把它放在這裏:How can I dismiss view?